krl*_*krl 5 javascript async-await babeljs ecmascript-next
我如何await在async函数调用call或apply用Babel?
下面是一个示例,其中getOrders是类的async方法Service:
class Service() {
async getOrders(arg1, arg2, arg3) {
return await this.anotherService.getOrders(arg1, arg2, arg3);
}
}
let service = new Service();
// ...
// Babel doesn't compile
// let stream = await service.getOrders.call(this, arg1, arg2, arg3);
// producing SyntaxError: Unexpected token for await
let stream = service.getOrders.call(this, arg1, arg2, arg3);
stream.pipe(res); // obviously not working without await in the prev line
Run Code Online (Sandbox Code Playgroud)
更新/解决方案
问题在于await常规函数中的匿名函数.而不是标记匿名函数async,我做了一个导致Babel的常规函数call.
感谢@loganfsmyth带领我找到解决方案.
Anasync function返回一个 Promise,并await接受一个Promise 。不需要async通过 await 调用所有函数。如果你想在标准的 JS 函数中使用异步函数,你可以直接使用 result 承诺。在你的情况下,调用一个函数 with.call仍然会像任何其他函数一样返回一个承诺,所以你会通过这个承诺等待:
async function doThing(){
let service = new Service();
var stream = await service.getOrders.call(this, arg1, arg2, arg3)
stream.pipe(res);
}
Run Code Online (Sandbox Code Playgroud)