在节点 7.4 中使用 async/await

Posted

技术标签:

【中文标题】在节点 7.4 中使用 async/await【英文标题】:Using async/await in node 7.4 【发布时间】: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

如何?

【问题讨论】:

async await with nodejs 7的可能重复 【参考方案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 指南。你可以在这里阅读:***.com/help/how-to-answer

以上是关于在节点 7.4 中使用 async/await的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 7.4 安装 Apache Cassandra 3.7

CentOS 7.4 Tengine安装配置详解

Ambari2.7.4自定义服务集成Flink1.9.2

如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?

如何使用 Apache Server 2.4 在 PHP 7.4 中启用 openSSL?

运行 weka3.7.4 包管理器时出错