SyntaxError: Função de token inesperada – Async Await Nodejs

Eu estava experimentando usando o Node versão 6.2.1 com alguns dos meus códigos. Tinha planos de migrar a maioria dos códigos orientados para retorno de chamadas para algo que parece mais limpo e talvez tenha um desempenho melhor.

Eu não tenho idéia porque, o terminal gera um erro quando tento executar o código do nó.

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

o que estou perdendo? Por favor, me jogue alguma luz sobre o mesmo.


Atualização 1:

Eu tentei usar Babel como Quentin sugeriu, mas ainda estou recebendo o seguinte erro.

Código atualizado

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

As funções assíncronas não são suportadas pelas versões do Node anteriores à versão 7.6 .

Você precisará transpilar seu código (por exemplo, usando Babel ) para uma versão do JS que o Node entenda se você estiver usando uma versão mais antiga.

O Nodejs suporta async / await da versão 7.6.

Publicação de lançamento: https://v8project.blogspot.com.br/2016/10/v8-release-55.html

O Node.JS não suporta totalmente o ES6 atualmente, portanto, você pode usar o módulo asyncawait ou transpile -o usando Bable.

instalar

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

Se você está apenas experimentando, você pode usar a ferramenta de linha de comando babel-node para testar os novos resources do JavaScript

  1. Instale o babel-cli no seu projeto

    $ npm install --save-dev babel-cli

  2. Instale as predefinições

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

  3. Configure suas predefinições de babel

    Crie .babelrc na pasta raiz do projeto com o seguinte conteúdo:

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

  4. Execute seu script com o babel-node

    $ babel-node helloz.js

Isso é apenas para desenvolvimento e teste, mas parece que é o que você está fazendo. No final você vai querer configurar o webpack (ou algo similar) para transpilar todo o seu código para produção

Se você quiser rodar o código em outro lugar, o webpack pode ajudar e aqui está a configuração mais simples que eu pude descobrir:

node v6.6.0

Se você acabou de usar em desenvolvimento. Você consegue fazer isso:

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

o package.json seria assim:

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

crie o arquivo .babelrc e escreva isto:

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

e então, execute seu script async/await como este:

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

Embora eu chegue atrasado, o que funcionou para mim foi instalar o plugin transform-async-generator e transform-runtime assim:

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

o package.json seria assim:

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

crie o arquivo .babelrc e escreva isto:

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

e então feliz codificação com async/await