SyntaxError: fonction jeton inattendue – Async Await Nodejs

J’expérimentais l’utilisation de Node version 6.2.1 avec une partie de mon code. Avait prévu de migrer la plupart des codes orientés hyper-callback vers quelque chose qui semble plus propre et peut-être plus performant.

Je n’ai aucune idée pourquoi, le terminal jette une erreur lorsque j’essaye d’exécuter le code de noeud.

helloz.js

(async function testingAsyncAwait() { await console.log("For Trump's Sake 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._comstack (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 

Qu’est-ce que je rate? S’il vous plaît, jetez-moi un peu de lumière sur la même chose.


Mise à jour 1:

J’ai essayé d’utiliser Babel comme l’a suggéré Quentin, mais je reçois toujours l’erreur suivante.

Code mis à jour

 require("babel-core/register"); require("babel-polyfill"); (async function testingAsyncAwait() { await console.log("For Trump's Sake 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("For Trump's Sake Print me!"); 5 | })(); 

Les fonctions asynchrones ne sont pas sockets en charge par les versions de noeud antérieures à la version 7.6 .

Vous devrez transposer votre code (par exemple en utilisant Babel ) dans une version de JS que Node comprend si vous utilisez une version antérieure.

Nodejs supporte async / waiting depuis la version 7.6.

Publication: https://v8project.blogspot.com.br/2016/10/v8-release-55.html

Node.JS ne supporte pas complètement ES6 actuellement, vous pouvez donc utiliser le module asyncawait ou le transposer en utilisant Bable.

installer

 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!")); }))(); 

Si vous êtes en train d’expérimenter, vous pouvez utiliser l’outil de ligne de commande babel-node pour tester les nouvelles fonctionnalités JavaScript.

  1. Installez babel-cli dans votre projet

    $ npm install --save-dev babel-cli

  2. Installer les presets

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

  3. Configurez vos presets babel

    Créez .babelrc dans le dossier racine du projet avec le contenu suivant:

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

  4. Exécutez votre script avec babel-node

    $ babel-node helloz.js

Ceci est uniquement pour le développement et les tests, mais cela semble être ce que vous faites. En fin de compte, vous voudrez configurer webpack (ou quelque chose de similaire) pour transférer tout votre code en production.

Si vous voulez exécuter le code ailleurs, webpack peut vous aider et voici la configuration la plus simple que je pourrais trouver:

node v6.6.0

Si vous utilisez juste en développement. Tu peux le faire:

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

le package.json serait comme ceci:

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

.babelrc fichier .babelrc et écrivez ceci:

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

et ensuite, lancez votre script async/await comme ceci:

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

Bien que j’arrive tard, ce qui a fonctionné pour moi était d’installer le plug – in transform-async-generator et transform-runtime comme suit:

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

le package.json serait comme ceci:

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

.babelrc fichier .babelrc et écrivez ceci:

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

et puis codage heureux avec async/await