【问题标题】:NodeJS script with async/await causing syntax error (v7.10.0)带有 async/await 的 NodeJS 脚本导致语法错误(v7.10.0)
【发布时间】:2017-05-21 14:25:43
【问题描述】:

我正在尝试在 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。

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

【问题讨论】:

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


    【解决方案1】:

    await 仅在 async 函数内部有效,因此您需要例如异步 IIFE 来包装您的代码:

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

    而且,由于来自async 函数的返回值被一个promise 包装,您可以将getValueAsync 简化为:

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

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

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

    【讨论】:

    • 但根据MDN documentationawait 也可用于返回Promise 的函数。实际上async使函数返回promise。所以我很困惑。
    • 好的,我明白了,await 必须始终插入到async 函数中。根据文档。 await 表达式导致 async 函数执行暂停,直到 Promise 完成或拒绝,并在完成后恢复 async 函数的执行。恢复时,await 表达式的值是已实现的Promise 的值。因此,我永远无法拥有最高杠杆await 声明。
    猜你喜欢
    • 2016-11-27
    • 2020-05-30
    • 2017-11-20
    • 2020-11-24
    • 2018-10-13
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多