web-dev-qa-db-fra.com

SyntaxError: Fonction de jeton inattendue - Async Await Nodejs

J'essayais d'utiliser Node version 6.2.1 avec une partie de mon code. Nous avions prévu de migrer la plupart des codes orientés hyper-callback vers quelque chose de plus propre et peut-être plus performant.

Je ne sais pas pourquoi, le terminal génère une erreur lorsque j'essaie d'exécuter le code de noeud.

helloz.js

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

Journaux -

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

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 le suggérait Quentin. Cependant, l'erreur suivante persiste.

Code mis à jour -

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

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

Journaux -

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

Les fonctions asynchrones sont non prises en charge par Node versions antérieures à la version 7.6 .

Vous devrez transpiler votre code (par exemple, en utilisant Babel ) vers une version de JS que Node comprend si vous utilisez une version plus ancienne.

Cela dit, la version actuelle (2018) LTS de Node.js est 8.x; par conséquent, si vous utilisez une version antérieure, vous devez absolument envisager la mise à niveau.

152
Quentin

Nodejs supporte async/wait à partir de la version 7.6.

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

35

Node.JS ne supporte pas complètement ES6 actuellement, vous pouvez donc utiliser le module asyncawait ou le transpile le 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("Print me!"));
}))();
27
Nivesh

Si vous venez d’essayer, vous pouvez utiliser l’outil de ligne de commande babel-node pour essayer les nouvelles fonctionnalités de 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

Ce n'est que 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 transpiler tout votre code pour la production.

Si vous voulez exécuter le code ailleurs, webpack peut vous aider et voici la configuration la plus simple que j'ai pu trouver:

19
stujo

node v6.6.0

Si vous utilisez simplement 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"
}

créez le 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
12
slideshowp2

Bien que j'arrive tard, ce qui a fonctionné pour moi a été d'installer le plugin transform-async-generator et transform-runtime :

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

créez le fichier .babelrc et écrivez ceci:

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

puis codage heureux avec async/await

3

inclure et spécifier la version la plus récente du moteur de noeud, par exemple, j’ai ajouté la version 8.

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

dans le fichier suivant

package.json

2
Githithu Wambura