繁体   English   中英

babel为什么将async / await转换为再生器?

[英]Why does babel translate async/await to regenerators?

所有版本的babel都将await语句转换为_asyncToGenerator调用,显然有一些缺点:

  1. 代码大小急剧增加
  2. 需要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#thenawait语句的混合映射到Promise链,因此,我必须错过某些情况,其中纯Promise#then不适合await语句。

您可以使用其他两个插件: async-to-generatorasync-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM