我正在尝试在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。
如何让我的脚本编译并运行?
答案 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');
});
}