我知道ES6 await
功能,我想在我在课堂上创建的函数中使用它。
效果很好,但是当函数是static
函数时,它不会。有什么理由吗?此外,在await
函数中使用static
的正确方法是什么?
class MyClass {
resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
static async asyncCall() {
console.log('calling');
var result = await this.resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
}
MyClass.asyncCall();
答案 0 :(得分:2)
您可以在静态函数中使用await
。那不是你的问题。
但是,静态函数中的this
是MyClass
所以this.someMethod()
正在寻找另一个静态方法,而不是实例方法而resolveAfter2Seconds()
是一个实例方法,而不是静态方法,this.resolveAfter2Seconds()
无法找到该方法,因为这类似于调用MyClass.resolveAfter2Seconds()
并不存在。
如果您还resolveAfter2Seconds()
为static
,那么它可能会有效,因为this
内的asyncCall()
为MyClass
所以this.resolveAfter2Seconds()
正在寻找另一种静态方法。
这应该适用于resolveAfter2Seconds
也是静态的地方:
class MyClass {
static resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
static async asyncCall() {
console.log('calling');
var result = await this.resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
}
或者,你可以进入原型并从那里调用它,因为它实际上是一个静态方法(根本没有引用this
):
static async asyncCall() {
console.log('calling');
var result = await MyClass.prototype.resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
答案 1 :(得分:2)
您正在调用await this.resolveAfter2Seconds();
,就好像this
是MyClass
的实例,但在您调用它的情况下,它不是' t - resolveAfter2Seconds
是MyClass
的原型上的一种方法,它不是该类本身的属性。改为调用原型方法:
class MyClass {
resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
static async asyncCall() {
console.log('calling');
var result = await this.prototype.resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
}
MyClass.asyncCall();