在节点7.4中使用async / await

时间:2017-01-20 05:22:04

标签: node.js async-await

我认为节点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?

5 个答案:

答案 0 :(得分:49)

是的。在Node.js v7中支持async-await,但它被锁定在harmony标志后面。尚未生产的功能就在这面旗帜的背后。

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

node --harmony-async-await app.js

async-await的官方发布将定于Node.js v8,将于4月推出。

您可以按照this拉取请求检查其状态。基本上async-await的正确运行取决于V8引擎v5.5与Node.js的集成。目前Node.js使用V8 v5.4,这是通过此拉取请求解决的。

更新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

答案 1 :(得分:14)

Node.js 7.6.0几个小时前发布,它们包括v8 5.5。 现在你可以使用没有标志的async / await。

答案 2 :(得分:2)

你需要和谐标志才能发挥作用。

使用node --harmony-async-await myscript.js

再试一次

答案 3 :(得分:2)

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

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

    makeRequest()

使用async / await:

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

makeRequest()

答案 4 :(得分:0)

我遇到了同样的问题,我使用下面的命令安装了asyncawait

npm install asyncawait

之后,我使用下面的命令

声明了await和async
const async = require('asyncawait/async');
const await = require('asyncawait/await');

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

对我来说效果很好。