javascript - update - SyntaxError: Fonction de jeton inattendue-Async Await Nodejs



async function syntaxerror unexpected token function (6)

Bien que j'arrive tard, ce qui a fonctionné pour moi a été d'installer 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"
}

Créez .babelrc fichier .babelrc et écrivez ceci:

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

et puis codage heureux avec async/await

https://ffff65535.com

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

Le nœud change rapidement alors j'ai pensé qu'il pourrait être utile de poster et de mettre à jour:

En ce moment, j'exécute le nœud VER 8.11.4 et le code suivant fonctionne correctement sans avoir à installer asychawait:

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
  console.log('calling');
  var result = await resolveAfter2Seconds();
  console.log(result);
  // expected output: 'resolved'
}

asyncCall();

Cet exemple et d'autres détails sont publiés ici: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function


Node.JS ne prend actuellement pas complètement en charge ES6. Vous pouvez donc utiliser le module asyncawait ou le copier à l'aide de 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!"));
}))();


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


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




async-await