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

时间:2014-11-04 20:45:33

标签: javascript node.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);
      }
   }
}

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

2 个答案:

答案 0 :(得分: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");
    });
},

答案 1 :(得分: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");
        });
    },