在节点 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
如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?