节点:尝试使用`async function`抛出错误

时间:2016-01-20 03:16:44

标签: javascript node.js asynchronous

我只有:

router.post('/register', async (req, res) => {
    // planning to use await in here
});    

但是我收到了这个错误。我试过googling如果节点支持await / async但我似乎无法取得任何进展,我只是继续寻找原生模块将其实现到节点中(这很可能是问题,但我真的希望它的语法错误和该节点支持async / await本地)

router.post('/register', async (req, res) => {
                           ^

SyntaxError: Unexpected token (
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/app.js:13:15)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/www:7:11)
at Module._compile (module.js:398:26)

任何信息都会非常感谢。

1 个答案:

答案 0 :(得分:3)

你在这里有一个选项是babel,它可以transpile这样的ES7语法可以运行节点。由于ES7仍然是一项正在进行中的工作,因此你不会得到异步/等待开箱即用,但是babel提供了一个变换(https://babeljs.io/docs/plugins/transform-async-to-generator/),你可以包含它来使其工作。

编辑: babel将其包含在stage3预设中。所以一旦你安装了babel和预设:

npm install babel-core babel-preset-stage-3

全局安装babel-cli,以便在shell中运行babel-node

npm install -g babel-cli

像这样创建一个.babelrc:

{
  "presets": [
    "stage-3"
  ]
}

这样的测试脚本:

'use strict';

function bar() {
    return Promise.resolve('banana');
}

async function foo() {
    return await bar();
}

foo().then(console.log);

你可以确认它是这样的:

▶ babel-node test.js
banana