Javascript promise js函数调用同一类中的另一个函数

Javascript promise js函数调用同一类中的另一个函数,javascript,node.js,Javascript,Node.js,我正试图建立一个自定义的日志,我正试图做什么,因为我采取了截图后,我想调用我的日志功能,以记录图像名称。当我在承诺中时,它不能看到类中的所有函数 module.exports = { takeScreenshot: function(driver, filename) { driver.takeScreenshot().then(function(data) { name = filename || 'ss.png'; var sc

我正试图建立一个自定义的日志,我正试图做什么,因为我采取了截图后,我想调用我的日志功能,以记录图像名称。当我在承诺中时,它不能看到类中的所有函数

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);
      }
   }
}
module.exports={
截图:函数(驱动程序、文件名){
driver.takeScreenshot().then(函数(数据){
name=filename | |“ss.png”;
var screenshotPath='results/screenshots/';
fs.writeFileSync(屏幕快照路径+名称,数据'base64');
返回屏幕快照路径+名称;
}).然后(函数(e){
本条(e,“真实”);
});
},
记录器:功能(日志、屏幕截图){
isScreenshot=屏幕截图| |“假”;
var obj={};
如果(isScreenshot==“真”){
obj[testName.replace(//g',)]={
日志:“,
截图:“
};
推(obj);
}否则{
obj[testName.replace(//g',)]={
日志:“+log+”,
屏幕截图:“”
};
推(obj);
}
}
}

基本上,它没有看到记录器方法。我错过了什么?谢谢

然后的
回调上下文中是不同的。您需要创建一个闭包才能使其工作

这是一篇关于闭包的好文章

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");
    });
},

您的
不同。
有关此的更多信息,请阅读

 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");
        });
    },