所有版本的 babel 都将一个 await
语句翻译成一个 _asyncToGenerator
调用,它显然有一些缺点:
- 代码量急剧增加
- 需要
regeneratorRuntime
库
根据我对语法的理解,我认为任何 await
都应该等同于 Promise#then
调用,所以下面的代码:
try {
let user = await getUser();
console.log(user.name);
}
catch (error) {
console.error(error);
}
相当于:
let promise$of$getUser$ = getUser();
$promise$of$getUser$.then(
$result$ => console.log($result$),
$error$ => console.error($error$)
);
通过这种方式,也可以正确地将多个 await
语句或者甚至是 Promise#then
和 await
语句的混合映射到一个Promise
链,所以我一定错过了一些纯 Promise#then
不适合 await
语句的情况。
最佳答案
您可以使用其他 2 个插件:async-to-generator和 async-to-module-method .
还有一个名为 kneden 的实验性插件它确实会尝试执行您的建议(异步 promise )。它仍然是 WIP,并不能解决所有情况,而且很可能无法解决。
关于javascript - 为什么 babel 将 async/await 翻译成再生器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36516955/