[英]Why does babel translate async/await to regenerators?
所有版本的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
语句。
您可以使用其他两个插件: async-to-generator和async-to-module-method 。
还有一个名为kneden的实验性插件,它确实会按照您的建议进行操作(异步承诺)。 它仍然是WIP,不能解决所有情况,很可能无法解决。
我认为您忽略了循环:
for (let userId of userIds) {
const user = await getUser(userId);
console.log(user);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.