代码之家  ›  专栏  ›  技术社区  ›  Jay

为什么巴贝尔要把异步函数变成节点8.10的生成器?

  •  0
  • Jay  · 技术社区  · 7 年前

    如果node 8.10支持async/await,那么babel为什么要将异步函数转换为生成器呢?

    巴贝尔翻译:

    const foo = async () => {
      const b = await bar()
      console.log(b)
    }
    

    分为:

    const foo = (() => {
      var _ref2 = (0, _asyncToGenerator3.default)(function* () {
        const b = yield bar();
        console.log(b);
      });
    
      return function foo() {
        return _ref2.apply(this, arguments);
      };
    })()
    

    这是我的babel配置:

      "babel": {
        "plugins": [
          "source-map-support",
          "transform-runtime"
        ],
        "presets": [
          [
            "env",
            {
              "targets": {
                "node": "8.10"
              }
            }
          ],
          "stage-3"
        ]
      }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   loganfsmyth    7 年前

    通过启用 "stage-3" . 这个 env 预设将根据配置忽略它们,但是 stage-3 又选择回来了。除其他原因外,这也是我们 dropped the stage-X presets 完全在Babel7.x中,因为它们很难理解,而且你很少知道它们实际上在做什么。

    我的建议是删除 预设,如果有插件在那里,你真的想要,添加他们在一个个案的基础上。

    推荐文章