我正在用ES6编写一些Node代码。在我的代码中,我有一个类,如下所示。请注意,这是一个基本示例,旨在隔离和显示问题。
class MyClass {
constructor() {
this.id = uuid();
this.number = Math.floor((Math.random() * 100) + 1);
}
process() {
this.validateNumber()
.then(this.generateImage)
.catch(function(err) {
console.log(err);
})
;
}
validateNumber() {
let self = this;
var promise = new Promise(function(resolve, reject) {
// do stuff with self.number
resolve({});
});
}
generateImage() {
console.log(this);
// the above prints "undefined" in the console window
// how do I get this.number again?
}
}
在此类中,您会注意到我在构造函数中生成了一个随机数。我希望这个数字在我的类中都可以在整个方法中使用。但是,由于我有一种将 promise 链接在一起的方法,因此this
就像在执行validateNumber
后失去意义一样。
我该如何解决这个问题?
ES6引入了一个名为箭头函数的功能。除了语法比传统的function
语法更简洁之外,它还保留了上下文。实质上,您的代码可以更改为以下内容:
var promise = new Promise((resolve, reject) => {
console.log(this); // MyClass
resolve({});
});
您还需要保留then
内的上下文
this.validateNumber()
.then(() => this.generateImage());