带有async / await的NodeJS脚本导致语法错误(v7.10.0)

时间:2017-05-21 14:25:43

标签: node.js async-await syntax-error

我正在尝试在NodeJS中使用async / await,但是我的脚本抛出了语法错误。

我的印象是async / await是supported naively since Node 7.6。当我运行node -v时,我得到v7.10.0

以下是index.js的内容:

async function getValueAsync() {
    return new Promise(function(resolve) {
        resolve('foo');
    });
}

let value = await getValueAsync();
console.log(value);

但是当我用node index.js调用此脚本时,我得到了:

let value = await getValueAsync();
                  ^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
    at createScript (vm.js:53:10)
    at Object.runInThisContext (vm.js:95:10)
    at Module._compile (module.js:543:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)

我正在运行Linux Mint 18.1。

如何让我的脚本编译并运行?

1 个答案:

答案 0 :(得分:13)

await仅在async函数内有效,因此您需要使用async IIFE来包装代码:

void async function() {
  let value = await getValueAsync();
  console.log(value);
}();

并且,由于来自async函数的返回值由承诺包装,因此您可以将getValueAsync简化为:

async function getValueAsync() {
  return 'foo';
}

或者不要将其标记为async并从中返回承诺:

function getValueAsync() {
  return new Promise(function(resolve) {
    resolve('foo');
  });
}