SyntaxError: Unexpected token fonction Asynchrone Attendent Nodejs
Je faisais des expériences à l'aide d'un Noeud version 6.2.1 avec certains de mon code. Avait des plans pour migrer la plupart de l'hyper-rappel orienté codes à quelque chose qui ressemble plus propre et peut-être de meilleures performances.
Je n'ai aucune idée pourquoi, le terminal déclenche un message d'erreur lorsque j'essaie d'exécuter le nœud code.
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
Ce qui me manque? Merci de me jeter un peu de lumière sur la même.
Mise à jour 1:
J'ai essayé d'utiliser Babel Quentin suggéré, Mais, j'obtiens l'erreur suivante encore.
Mise À Jour Du Code-
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 | })();
- Node.js maintenant prend en charge officiellement fonction async. voir cette réponse.
- Oui. Je sais qu'il prend désormais en charge. Cette question a été poser près d'un an en arrière quand nous avons eu à utiliser babel. Merci pour la mention bien.
- Je viens de poster ici parce que beaucoup de gens vont encore venir à cette question. Ils doivent savoir.
Vous devez vous connecter pour publier un commentaire.
Async fonctions sont pas pris en charge par le Nœud versions plus anciennes que la version 7.6.
Vous aurez besoin de transpile votre code (par exemple à l'aide de Babel) à une version de JS qui Nœud comprend si vous utilisez une version plus ancienne.
Cela dit, le courant (2018) LTS version de Node.js est 8.x, donc si vous utilisez une version antérieure, vous devez très fortement envisager une mise à niveau.
--experimental-modules
n'a rien à voir avecasync/await
qui n'a pas besoin spécial des drapeaux pour être pris en charge.Nodejs prend en charge async/await à partir de la version 7.6.
Release post: https://v8project.blogspot.com.br/2016/10/v8-release-55.html
Node.JS ne prend pas entièrement en charge l'ES6 actuellement, de sorte que vous pouvez utiliser asyncawait module ou transpile à l'aide de Bable.
installer
helloz.js
Si vous êtes juste expérimenté, vous pouvez utiliser
babel-node
outil de ligne de commande pour essayer les nouvelles fonctions JavaScriptInstaller
babel-cli
dans votre projet$ npm install --save-dev babel-cli
Installer les presets
$ npm install --save-dev babel-preset-es2015 babel-preset-es2017
Installation de votre babel presets
Créer
.babelrc
dans le dossier racine du projet avec le contenu suivant:{ "presets": ["es2015","es2017"] }
Exécuter votre script avec
babel-node
$ babel-node helloz.js
Ce n'est que pour le développement et de test, mais qui semble être ce que vous êtes en train de faire. En fin de compte, vous devrez configurer webpack (ou quelque chose de similaire) à transpile tout votre code pour la production
Si vous souhaitez exécuter le code ailleurs, webpack peut aider et ici, c'est la configuration la plus simple que j'ai pu faire:
node v6.6.0
Si vous venez d'utiliser dans le développement. Vous pouvez faire ceci:
la
package.json
serait comme ceci:créer
.babelrc
fichier et écrire ceci:et puis, exécutez votre
async/await
script comme ceci:Si je suis arrivé en retard, ce qui a fonctionné pour moi a été d'installer transformer-async-générateur et transformer-runtime plugin comme ceci:
npm i babel-plugin-transform-async-to-generator babel-plugin-transform-runtime --save-dev
la
package.json
serait comme ceci:créer
.babelrc
fichier et écrire ceci:et puis amusez-vous avec
async/await
de les inclure et de spécifier le nœud de la version du moteur à la dernière, de dire qu'à ce moment j'ai ajouté la version 8.
dans le fichier suivant
Nœud est en train de changer rapidement, alors j'ai pensé qu'il pourrait être utile de publier et de mettre à jour:
À ce moment, je suis en cours d'exécution nœud VER 8.11.4 et le code suivant fonctionne très bien sans avoir à installer asychawait:
Cet exemple et plus de détails sont affichés ici: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function