我在JS类中有一个方法,在Promise的回调中,我希望它调用另一个类方法。
class MyClass {
myClassMethod(arg1) {
// this method did get called
}
aSecondClassMethod() {
//...
}
methodWithPromise() {
var myClassMethod = this.myClassMethod;
let aPromise = methodReturnPromise();
aPromise.then(function (value) {
myClassMethod(value);
}
}
所以我创建了一个名为myClassMethod
的变量,并将其设置为this.myClassMethod
。当我调试代码时,myClassMethod确实在Promise的then
回调中被调用。
我遇到的问题是当我的myClassMethod()
调用其他类方法(),即
myClassMethod(args) {
aSecondClassMethod();
}
我得到错误说aSecondClassMethod
是未定义的。我试着
myClassMethod(args) {
this.aSecondClassMethod();
}
但是它给了我同样的错误。我想我可以通过为myClassMethod()调用的每个类方法声明一个var来解决这个问题。
var aSecondClassMethod= this.aSecondClassMethod;
但是这看起来很麻烦去维护代码。
我想知道是否有更好的方法。
使用箭头函数,因为它捕获了封闭上下文的this
值。
aPromise.then(value => this.myClassMethod(value));
我还建议使用新的() => {}
函数符号来定义包含承诺的类方法。如果没有这个(或者一个老派的绑定),this
仍然是undefined
。
我通常的风格:
class MyClass {
myClassMethod = (value) => {
//something..
};
methodWithPromise = () => {
somePromise
.then((res) => {
this.myClassMethod(res);
})
.catch((err) => {
console.error(err);
return;
});
};
}