所有版本的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
语句。
答案 0 :(得分:1)
您可以使用其他2个插件:async-to-generator和async-to-module-method。
还有一个名为kneden的实验性插件,它确实尝试做你所建议的(异步承诺)。它仍然是WIP,并不考虑所有情况,很可能无法解决。
答案 1 :(得分:1)
我认为你忽略了循环:
for (let userId of userIds) {
const user = await getUser(userId);
console.log(user);
}