【问题标题】:Using async/await in node 7.4在节点 7.4 中使用 async/await
【发布时间】:2017-06-05 00:39:40
【问题描述】:

我认为节点 7.4 支持 async/await,但是这个示例不起作用:

const Promise = require('bluebird');

async function main(){
  await Promise.delay(1000)
}

main();

结果:

async function main(){
      ^^^^^^^^
SyntaxError: Unexpected token function

如何在节点 7.4 中使用 async/await?

【问题讨论】:

标签: node.js async-await


【解决方案1】:

是的,Node.js v7 支持 async-await,但它被锁定在 harmony 标志后面。尚未准备好生产的功能位于此标志后面。

要在 Node.js v7 中使用 async-await,只需使用此标志运行 Node 服务 -

node --harmony-async-await app.js

async-await 的官方版本预计将在 4 月推出的 Node.js v8。

您可以关注this拉取请求以检查其状态。基本上 async-await 的正确运行取决于 V8 引擎 v5.5 与 Node.js 的集成。目前 Node.js 使用 V8 v5.4,这个 pull request 解决了这个问题。

更新 1 - 似乎 V8 v5.5 可能会进入 Node.js v7。关注this拉取请求了解更多详情。

更新 2 - 好消息! Node.js 版本 7.6.0 现在正式支持 async 函数,无需使用 --harmony 标志,因为 V8 引擎 5.5 已成功移植。

现在,如果您的 Node.js 版本介于 7.0 到 7.5.0(含)之间,您只需要使用 --harmony 标志。有关完整的变更日志,请参阅 here

【讨论】:

    【解决方案2】:

    几个小时前发布的 Node.js 7.6.0,其中包括 v8 5.5。 现在你可以使用不带标志的 async/await 了。

    【讨论】:

      【解决方案3】:

      你需要和谐标志才能工作。

      node --harmony-async-await myscript.js重试

      【讨论】:

        【解决方案4】:

        Node 7.6 版现在支持开箱即用的 async/await。如果你还没有尝试过,你应该立即采用,永远不要回头。

          const makeRequest = () =>
              getJSON()
                .then(data => {
                  console.log(data)
                  return "done"
                })
        
            makeRequest()
        

        并使用异步/等待:

        const makeRequest = async () => {
          console.log(await getJSON())
          return "done"
        }
        
        makeRequest()
        

        【讨论】:

          【解决方案5】:

          我有同样的问题,我所做的是使用下面的命令安装 asyncawait

          npm install asyncawait
          

          之后我使用下面的命令声明了等待和异步

          const async = require('asyncawait/async');
          const await = require('asyncawait/await');
          

          然后在需要的地方使用这些,但我的命令在 async(my-code) & await(my-code) 内。

          它对我来说非常有效。

          【讨论】:

          • 您好,欢迎来到 stackockflow,如需解答,请提供更多信息,例如您的解决方案为何有效以及做错了什么。这些答案可以在谷歌等网站上找到,每个人都应该清楚。感谢您的贡献,祝您好运!
          • 欢迎来到 SO。正如 mischva11 提到的,请详细解释您的答案。此外,请在给出答案时遵循 SO 指南。你可以在这里阅读:stackoverflow.com/help/how-to-answer
          猜你喜欢
          • 2018-04-02
          • 2020-02-14
          • 2019-03-14
          • 2016-02-02
          • 2022-01-22
          • 2021-09-27
          • 2022-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多