javascript - 为什么 babel 将 async/await 翻译成再生器?

标签 javascript babeljs ecmascript-harmony

所有版本的 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 语句的情况。

最佳答案

您可以使用其他 2 个插件:async-to-generatorasync-to-module-method .

还有一个名为 kneden 的实验性插件它确实会尝试执行您的建议(异步 promise )。它仍然是 WIP,并不能解决所有情况,而且很可能无法解决。

关于javascript - 为什么 babel 将 async/await 翻译成再生器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36516955/

相关文章:

javascript - ES6 `let` 和 `const` 是否仅在使用 babel 编译时在编译时有效?

react-native - Jest 测试 React Native 不能在模块外使用 import 语句

Javascript 代理 : node-proxy, 和谐,混合对象与神奇的 getter 和 setter ......在 Coffeescript 中?

javascript - 将 Singleton JS 对象转换为使用 ES6 类

javascript - 在 ReactJS 中更新数组中对象的最佳方法是什么?

javascript - 如何从另一个 Controller 或指令触发 Controller 方法?

javascript - ReactJS 通过 props 回调设置另一个类的状态

javascript - jquery 字符串变量上的每个函数

javascript - 对具有数组的 Son 数据进行 Angular ng-repeat

javascript - 如何对 ES6 生成器进行特征检测?