SyntaxError: 意外令牌函数-异步等待 Nodejs

我正在试验使用节点版本 6.2.1与我的一些代码。曾计划将大多数超回调导向的代码迁移到看起来更干净、性能可能更好的代码上。

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

你好 Js

(async function testingAsyncAwait() {
await console.log("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:

我试着按昆廷的建议使用巴别塔,但是,我仍然得到下面的错误。

更新密码-

require("babel-core/register");
require("babel-polyfill");


(async function testingAsyncAwait() {
await console.log("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("Print me!");
5 | })();
220842 次浏览

异步函数是 7.6以上的 Node 版本不支持

您需要将您的代码(例如使用 巴别塔)转换为 Node 能够理解的 JS 版本,如果您使用的是旧版本的话。

也就是说,不支持异步函数的 Node.js 的版本现在已经过时了,不再受支持,所以如果您使用的是早期版本,那么您应该非常强烈地考虑升级。

JS 目前不完全支持 ES6,因此您可以使用 异步等待模块或者使用 Babel 使用 平淡无奇模块。

安装

npm install --save asyncawait

你好 Js

var async = require('asyncawait/async');
var await = require('asyncawait/await');


(async (function testingAsyncAwait() {
await (console.log("Print me!"));
}))();

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

  1. babel-cli安装到项目中

    $ npm install --save-dev babel-cli

  2. 安装预置

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

  3. 设置你的 Babel 预设

    在项目根文件夹中创建 .babelrc,其内容如下:

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

  4. babel-node运行脚本

    $ babel-node helloz.js

这只是为了开发和测试,但是这似乎就是您正在做的事情。最后,您需要设置 webpack (或类似的东西)来传输所有生产代码

如果您想在其他地方运行代码,webpack 可以提供帮助,下面是我能够解决的最简单的配置:

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"
}

创建 .babelrc文件并编写如下代码:

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

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

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

Nodejs 支持7.6版中的异步/等待。

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

虽然我来晚了,但对我有用的是安装 变换-异步生成器变换-异步生成器转换-运行时插件,就像这样:

npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev

package.json会是这样的:

"devDependencies": {
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-runtime": "6.23.0"
}

创建 .babelrc文件并编写如下代码:

{
"plugins": ["transform-async-to-generator",
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
]
}

然后愉快地用 async/await编码

包含并指定节点引擎版本到最新版本,比如说此时我已经添加了版本8。

{
"name": "functions",
"dependencies": {
"firebase-admin": "~7.3.0",
"firebase-functions": "^2.2.1",
},
"engines": {
"node": "8"
},
"private": true
}

在下面的文件中

包裹 Json