SyntaxError:意外的令牌函数 - Async Await Nodejs

IT技术 javascript node.js express asynchronous async-await
2021-01-16 10:31:30

我正在尝试在我的一些代码中使用 Node 6.2.1曾计划将大多数面向超级回调的代码迁移到看起来更干净并且可能性能更好的东西。

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

hello.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:

我尝试按照 Quentin 的建议使用 Babel,但是,我仍然收到以下错误。

更新代码-

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 | })();
6个回答

低于 7.6 的 Node 版本不支持异步函数

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

也就是说,不支持异步函数的 Node.js 版本现在都已结束生命周期并且不受支持,因此如果您使用的是早期版本,您应该强烈考虑升级。

Nodejs 从 7.6 版开始支持 async/await。

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

你可以将你的函数部署为 NodeJS v6 或 v8,确保你部署为 v8(Beta)。
2021-03-28 10:31:30

Node.JS 目前不完全支持 ES6,所以你可以使用asyncawaitmodule或使用Bable转译它。

安装

npm install --save asyncawait

hello.js

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

(async (function testingAsyncAwait() {
    await (console.log("Print me!"));
}))();
在使用上面的库 (asyncawait) 来填充 await 和 async 时,使用括号至关重要。在 ES2017 中,await 和 async 是关键字。在上面的库中,它们是函数。
2021-03-21 10:31:30

如果您只是在试验,您可以使用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_modules/.bin/babel-nodehelloz.js 而不是 babel-nodehelloz.js
2021-03-15 10:31:30
嗨,马蒂,我认为这取决于您是全局安装了 babel-node 还是仅在包项目中安装,在我的情况下,我可能已经全局安装了它
2021-03-18 10:31:30
再次单击,我得到了相同的结果。我在 github 上看到了一个 404 ¿?
2021-03-26 10:31:30

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
谢谢,使用 babel-plugin-transform-async-to-generator 解决了我在使用 uglify 时的问题
2021-03-31 10:31:30