Node.js 7.5上的``等待意外标识符''

我正在尝试使用awaitNode.js中的关键字。我有这个测试脚本:


"use strict";

function x() {

  return new Promise(function(resolve, reject) {

    setTimeout(function() {

      resolve({a:42});

    },100);

  });

}

await x();

但是当我在节点上运行它时


await x();

      ^

SyntaxError: Unexpected identifier

是否在Mac上使用Node.js 7.5或Node.js 8(每晚构建)使用node或node --harmony-async-await在Node.js'repl'中运行它。


奇怪的是,相同的代码在Runkit JavaScript笔记本环境中也有效:https ://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b


我究竟做错了什么?


万千封印
浏览 770回答 3
3回答

江户川乱折腾

多亏了其他评论者和一些其他研究await只能用于一个async功能,例如async function x() {  var obj = await new Promise(function(resolve, reject) {    setTimeout(function() {      resolve({a:42});    },100);  });  return obj;}然后,我可以将此功能用作Promise,例如x().then(console.log)或在另一个异步功能中。令人困惑的是,Node.js副本不允许您执行await x();与RunKit笔记本环境一样。

素胚勾勒不出你

正如其他人所说,您不能在异步函数之外调用“ await”。但是,要解决此问题,可以包装await x();。在异步函数调用中。即function x() {  return new Promise(function(resolve, reject) {    setTimeout(function() {      resolve({a:42});    },100);  });}//Shorter Version of x():var x = () => new Promise((res,rej)=>setTimeout(() => res({a:42}),100));(async ()=>{    try{      var result = await x();      console.log(result);    }catch(e){      console.log(e)    }})();这应该在Node 7.5或更高版本中工作。也适用于铬金丝雀片段。

UYOU

因此,根据其他人的建议,await可以在异步内部运行。因此,您可以使用以下代码来避免使用then:async function callX() {    let x_value = await x();    console.log(x_value);}callX();
打开App,查看更多内容
随时随地看视频慕课网APP