SyntaxError:意外的标记函数 – asynchronous等待Nodejs

我正在尝试使用节点版本6.2.1与我的一些代码。 有计划将大部分超callback定向代码迁移到看起来更干净,可能performance更好的东西。

我不知道为什么,当我尝试执行节点代码时,terminal抛出一个错误。

helloz.js

(async function testingAsyncAwait() { await console.log("For Trump's Sake Print me!"); })(); 

日志-

 BOZZMOB-M-T0HZ:rest bozzmob$ node helloz.js /Users/bozzmob/Documents/work/nextgennms/rest/helloz.js:1 (function (exports, require, module, __filename, __dirname) { (async function testingAsyncAwait() { ^^^^^^^^ SyntaxError: Unexpected token function at Object.exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:513:28) at Object.Module._extensions..js (module.js:550:10) at Module.load (module.js:458:32) at tryModuleLoad (module.js:417:12) at Function.Module._load (module.js:409:3) at Function.Module.runMain (module.js:575:10) at startup (node.js:160:18) at node.js:456:3 BOZZMOB-M-T0HZ:rest bozzmob$ node -v v6.2.1 

我错过了什么? 请给我一些同样的东西。


更新1:

我试图用Quentin的build议来使用Babel,但是,我仍然得到以下错误。

更新的Code-

要求(“巴别核/注册”); 要求( “巴别-填充工具”);

 (async function testingAsyncAwait() { await console.log("For Trump's Sake Print me!"); })(); 

日志-

 BOZZMOB-M-T0HZ:rest bozzmob$ babel helloz.js > helloz.trans.js SyntaxError: helloz.js: Unexpected token (3:7) 1 | require("babel-polyfill"); 2 | > 3 | (async function testingAsyncAwait() { | ^ 4 | await console.log("For Trump's Sake Print me!"); 5 | })(); 

asynchronousfunction不受版本7.6之前的节点版本的支持 。

如果你使用的是旧版本,你需要将你的代码(例如使用Babel )转换成Node可以理解的JS版本。

Nodejs支持7.6版本的asynchronous/等待。

发布post: https : //v8project.blogspot.com.br/2016/10/v8-release-55.html

Node.JS目前并不完全支持ES6,因此您可以使用asyncawait模块或使用Bable 转储它。

安装

 npm install --save asyncawait 

helloz.js

 var async = require('asyncawait/async'); var await = require('asyncawait/await'); (async (function testingAsyncAwait() { await (console.log("For Trump's Sake Print me!")); }))(); 

如果您只是试验,可以使用babel-node命令行工具来尝试新的JavaScriptfunction

  1. 安装babel-cli到你的项目中

    $ npm install --save-dev babel-cli

  2. 安装预设

    $ npm install --save-dev babel-preset-es2015 babel-preset-es2017

  3. 设置您的babel预设

    在以下内容的项目根文件夹中创build.babelrc

    { "presets": ["es2015","es2017"] }

  4. babel-node运行你的脚本

    $ babel-node helloz.js

这只是开发和testing,但似乎是你在做什么。 最后,你需要设置webpack(或类似的东西)来传输所有你的代码来生产

  • babel-node示例代码: https : //github.com/stujo/javascript-async-await/tree/15abac

如果你想在其他地方运行代码,webpack可以提供帮助,下面是我可以devise的最简单的configuration:

  • 完整的webpack例子: https : //github.com/stujo/javascript-async-await

node v6.6.0

如果你只是在开发中使用。 你可以这样做:

npm i babel-cli babel-plugin-transform-async-to-generator babel-polyfill --save-dev

package.json会是这样的:

"devDependencies": { "babel-cli": "^6.18.0", "babel-plugin-transform-async-to-generator": "^6.16.0", "babel-polyfill": "^6.20.0" }

创build.babelrc文件并写入:

{ "plugins": ["transform-async-to-generator"] }

然后,像这样运行你的async/await脚本:

./node_modules/.bin/babel-node script.js