我正在尝试构建一个自定义记录器以及我尝试做的事情,因为在我拍摄屏幕截图后,我想调用我的记录器功能来记录图像名称。当我处于承诺的时候,它无法看到类中的所有函数
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 :(得分: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");
});
},
答案 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");
});
},