2014-11-04 4 views
0

사용자 정의 로거를 빌드하려고하는데 스크린 샷을 찍은 후에 수행하려고하는 작업 이미지 이름을 기록하는 로거 함수를 호출하려고합니다. 그때 약속의 시간에있을 때 동급의 모든 기능을 볼 수 없습니다.js 함수가 같은 클래스에있는 다른 함수를 호출합니다.

module.exports = { 
    takeScreenshot: function(driver, filename) { 
     driver.takeScreenshot().then(function(data) { 
      name = filename || 'ss.png'; 
      var screenshotPath = 'results/screenshots/'; 
      fs.writeFileSync(screenshotPath + name, data, 'base64'); 
      return screenshotPath + name; 
     }).then(function(e) { 
      this.logger(e, "true"); 
     }); 
    }, 

    logger: function(log, screenshot) { 
     isScreenshot = screenshot || "false"; 
     var obj = {}; 
     if (isScreenshot == "true") { 
     obj[testName.replace(/ /g,'')] = { 
      logs: "", 
      screenshot: "<img src=\"" +log+ "\" class=\"test-img\" />" 
     }; 
     logger.push(obj); 
     } else { 
     obj[testName.replace(/ /g,'')] = { 
      logs: "<span class=\"test-log\">" +log + "</span>", 
      screenshot: '' 
     }; 
     logger.push(obj); 
     } 
    } 
} 

기본적으로 로거 방법을 보지 못합니다. 내가 뭘 놓치고 있니? 감사

답변

0

this은 다릅니다.
this에 대한 자세한 내용은 here을 참조하십시오.

takeScreenshot: function(driver, filename) { 
     var self = this; 
     driver.takeScreenshot().then(function(data) { 
      name = filename || 'ss.png'; 
      var screenshotPath = 'results/screenshots/'; 
      fs.writeFileSync(screenshotPath + name, data, 'base64'); 
      return screenshotPath + name; 
     }).then(function(e) { 
      self.logger(e, "true"); 
     }); 
    }, 
2

thisthen 콜백과 관련하여 다릅니다. 그것이 작동하려면 클로저를 만들어야합니다.

Here은 폐쇄에 관한 훌륭한 글입니다.

takeScreenshot: function(driver, filename) { 
    var self = this; 

    driver.takeScreenshot().then(function(data) { 
     name = filename || 'ss.png'; 
     var screenshotPath = 'results/screenshots/'; 
     fs.writeFileSync(screenshotPath + name, data, 'base64'); 
     return screenshotPath + name; 
    }).then(function(e) { 
     self.logger(e, "true"); 
    }); 
}, 
관련 문제