2014-11-04 80 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是不同的。
閱讀here瞭解關於this的更多信息。

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

this是在then回調的上下文中不同。您需要創建一個閉包才能使其工作。

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