【问题标题】:for await (... of ...) not working. Babel present env, node v10对于等待(... of ...)不起作用。 Babel 预设环境,节点 v10
【发布时间】:2019-10-18 19:19:49
【问题描述】:

自从我从头开始一个 nodejs 项目已经有一段时间了,所以设置和配置 eslint、babel 等有点头疼。

现在我的 babelrc 是:

{
  "presets": [
    [
      "env",
      {
        "targets": {
          "node": "10"
        }
      }
    ]
  ],
  "plugins": [
    [
      "transform-runtime",
      {
        "regenerator": true
      }
    ]
  ]
}

package.json 具有开发依赖项:

"babel-cli": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.7.0",

现在我想遍历一个对象列表。对于每一个,我都需要执行一些我需要await on的异步任务,所以我做了:

for await (const thing of things) {
  const foo = await doSomethingThatTakesAwhile(thing)
  // etc
}

但是当我在 dev (nodemon via babel-node) 中运行它时,现在等待出现语法错误:

for await (const thing of things) {
    ^
Syntax Error Unexpected token, expected (
    at Parser.pp$5.raise (... \node_modules\babylon\lib\index.js:4454:13)
    at Parser.pp.unexpected (... \node_modules\babylon\lib\index.js:1761:8)
    at Parser.pp.expect (... \node_modules\babylon\lib\index.js:1749:33)
    at Parser.pp$1.parseForStatement (... \node_modules\babylon\lib\index.js:2008:8)
etc..

我是否必须更改我的 babel 配置,和/或我是否完全误解了 for/awaitawait/async

【问题讨论】:

  • 你能告诉我们什么命令node -v打印出来吗?
  • @jfriend00 感谢您的评论。它不会在顶层,它实际上会在异步函数中;这只是为了演示它不是我的确切代码。最终,things 也将变为异步,所以我知道无论如何我都必须使用 for-await-of。我的主要问题是让它编译并解决了。稍后将掌握语法和适用性...

标签: node.js async-await babeljs babel-node


【解决方案1】:

我发现了另一个项目,我知道 for await of 可以工作...看起来我使用的是旧的 babel 插件,而不是新的、分离出来的 @babel/xxx 库。经过反复试验安装和卸载东西:这是工作的结果 babelrc:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "10"
        }
      }
    ]
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "regenerator": true
      },
      "@babel/preset-env"
    ]
  ]
}

此时我已经安装了所有:

  • @babel/core
  • @babel/节点
  • @babel/cli
  • @babel/preset-env
  • @babel/plugin-transform-runtime

然后我遇到了这个问题:https://github.com/meteor/meteor/issues/10128 所以还必须安装 @babel/runtime 并固定在 7.0.0-beta.55 ... 现在它可以构建了!!

【讨论】:

    【解决方案2】:

    我相信你需要babel-plugin-proposal-async-generator-functions 插件来使用 for await 的语法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2020-06-11
    • 2021-09-07
    • 2021-07-14
    • 1970-01-01
    • 2019-03-10
    • 2022-01-27
    相关资源
    最近更新 更多