我有一个类方法,它是Promise中的回调函数。
myClass.js:
class myClass {
constructor() {}
doSomethingAsync(resolve, reject) {
let me = this;
console.log(me); // undefined
// .... do something that returns either resolve() or reject()
}
}
export default (new myClass);
app.js
import ClassA from "myClass.js";
new Promise(ClassA.doSomethingAsync).then(() => {
// .... do something if success ....
}
}).catch(() => {
// ... do something if failed ...
})
我的问题是me
内部的doSometingAsync()
应该是指ClassA
,但它显示的是undefined
。我怎样才能在该函数中引用ClassA?
当您提取对函数的引用并将其传递给其他函数时,它不会保持知道它应该是某个类的方法。它只是一个其他函数将调用的函数引用。因此,它不会保持与intance的this
的绑定。您可以使用bind()
显式维护对实例的绑定
class myClass {
constructor() {
this.name = "mark"
}
doSomethingAsync(resolve, reject) {
let me = this;
console.log(me);
}
}
let ClassA = new myClass
new Promise(ClassA.doSomethingAsync.bind(ClassA)).then(() => {
// .... do something if success ....
}).catch(() => {
// ... do something if failed ...
})
使用箭头功能:
class myClass {
constructor() {}
doSomethingAsync = (resolve, reject) => {
let me = this;
console.log(me);
}
}
export default (new myClass);
你需要将this
绑定到函数:
constructor() {
this.doSomethingAsync = this.doSomethingAsync.bind(this);
}
另外,你可以使用箭头功能,但我认为你需要一个特定版本的babel:
doSomethingAsync = (resolve, reject) => { ... }