it-swarm.com.de

SyntaxError: Unerwartete Token-Funktion - Async Await Nodejs

Ich habe versucht, Node version 6.2.1 mit einem Teil meines Codes zu verwenden. Hatte Pläne, die meisten hyper-callback-orientierten Codes auf etwas zu migrieren, das sauberer aussieht und vielleicht eine bessere Leistung bringt.

Ich habe keine Ahnung, warum das Terminal einen Fehler ausgibt, wenn ich versuche, den Knotencode auszuführen.

helloz.js

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

Logs -

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

Was vermisse ich? Bitte werfen Sie mir etwas Licht auf das gleiche.


pdate 1:

Ich habe versucht, Babel wie von Quentin vorgeschlagen zu verwenden. Trotzdem wird der folgende Fehler angezeigt.

Aktualisierter Code -

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

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

Logs -

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 | })();
111
bozzmob

Asynchrone Funktionen sind nicht unterstützt von Node Versionen älter als Version 7.6 .

Sie müssen Ihren Code transpilieren (z. B. mit Babel ), um eine Version von JS zu erhalten, die Node versteht, wenn Sie eine ältere Version verwenden.

Die aktuelle (2018) LTS Version von Node.js ist jedoch 8.x. Wenn Sie also eine frühere Version verwenden, sollten Sie ein Upgrade in Betracht ziehen.

152
Quentin

Nodejs unterstützt Async/Warten ab Version 7.6.

Veröffentlichungsbeitrag: https://v8project.blogspot.com.br/2016/10/v8-release-55.html

35

Node.JS unterstützt derzeit ES6 nicht vollständig, daher können Sie entweder asyncawait -Modul verwenden oder transpilieren , indem Sie Bable verwenden.

installieren

npm install --save asyncawait

helloz.js

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

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

Wenn Sie nur experimentieren, können Sie mit dem Befehlszeilentool babel-node die neuen JavaScript-Funktionen ausprobieren

  1. Installieren Sie babel-cli in Ihrem Projekt

    $ npm install --save-dev babel-cli

  2. Installieren Sie die Voreinstellungen

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

  3. Richten Sie Ihre Babel-Voreinstellungen ein

    Erstellen Sie .babelrc im Projektstammordner mit folgendem Inhalt:

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

  4. Führen Sie Ihr Skript mit babel-node aus.

    $ babel-node helloz.js

Dies ist nur zum Entwickeln und Testen gedacht, aber genau das tun Sie anscheinend. Am Ende möchten Sie ein Webpack (oder ähnliches) einrichten, um Ihren gesamten Code für die Produktion zu transpilieren

Wenn Sie den Code an einer anderen Stelle ausführen möchten, hilft Ihnen das Webpack. Hier ist die einfachste Konfiguration, die ich finden konnte:

19
stujo

node v6.6.0

Wenn Sie nur in der Entwicklung verwenden. Du kannst das:

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

der package.json würde so aussehen:

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

erstelle eine .babelrc Datei und schreibe diese:

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

führen Sie dann Ihr async/await -Skript folgendermaßen aus:

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

Obwohl ich zu spät komme, funktionierte es für mich, transform-async-generator und transform-runtime wie folgt zu installieren:

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

der package.json würde so aussehen:

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

erstelle eine .babelrc Datei und schreibe diese:

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

und dann viel Spaß beim Codieren mit async/await

nehmen Sie die neueste Version der Node Engine auf und geben Sie sie an. Sagen wir, zu diesem Zeitpunkt habe ich Version 8 hinzugefügt.

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

in der folgenden Datei

package.json

2