SyntaxError: Неожиданная функция токена - Async Await Nodejs

Я экспериментировал с использованием версии Node6.2.1 с некоторыми из моего кода. Он планировал перенести большинство кодов, ориентированных на гипер-обратный вызов, во что-то, что выглядит чище и, возможно, работает лучше.

Я понятия не имею, почему, терминал выдает ошибку, когда я пытаюсь выполнить код узла.

helloz.js

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

ЖУРНАЛЫ РЕГИСТРАЦИИ-

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

Что мне не хватает? Пожалуйста, пролите мне немного света на то же самое.

Обновление 1:

Я пытался использовать Babel, как предложил Квентин, но я все еще получаю следующую ошибку.

Обновленный код

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

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

ЖУРНАЛЫ РЕГИСТРАЦИИ-

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 | })();
 Jyotman Singh22 февр. 2017 г., 07:27
Node.js теперь официально поддерживает асинхронную функцию.увидеть этот ответ.
 bozzmob24 февр. 2017 г., 09:09
@JyotmanSingh Да. Я знаю, что сейчас поддерживает. Этот вопрос задавали около года назад, когда нам приходилось пользоваться babel. Спасибо за упоминание, хотя.
 Jyotman Singh24 февр. 2017 г., 09:23
Я только что опубликовал здесь, потому что многие люди все еще будут приходить к этому вопросу. Они должны знать.

Ответы на вопрос(7)

поэтому я подумал, что будет полезно опубликовать и обновить:

В настоящее время я запускаю узел VER 8.11.4, и следующий код работает нормальнобез необходимость установить 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();

Этот пример и более подробная информация размещены здесь:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

Решение Вопроса

не поддерживается версиями Node старше версии 7.6.

Вам нужно будет перенести свой код (например, используягалдеж) к версии JS, которую Node понимает, если вы используете более старую версию.

Тем не менее, текущий (2018)LTS версия Node.js - 8.x, поэтому, если вы используете более раннюю версию, вам следует очень серьезно подумать об обновлении.

 Quentin05 окт. 2018 г., 08:08
@AlexisWilke - Вы совершенно не правы.--experimental-modules не имеет ничего общего сasync/await который не требует специальных флагов для поддержки.

babel-node инструмент командной строки, чтобы опробовать новые функции JavaScript

устанавливатьbabel-cli в ваш проект

$ npm install --save-dev babel-cli

Установить пресеты

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

Настройте свои предустановки Babel

Создайте.babelrc в корневой папке проекта со следующим содержимым:

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

Запустите ваш скрипт сbabel-node

$ babel-node helloz.js

Это только для разработки и тестирования, но, похоже, это то, что вы делаете. В конце вы захотите настроить веб-пакет (или что-то подобное), чтобы транспортировать весь ваш код для производства

Пример кода Babel-узла:https://github.com/stujo/javascript-async-await/tree/15abac

Если вы хотите запустить код где-то еще, вам может помочь webpack, и вот самая простая конфигурация, которую я мог бы разработать:

Полный пример веб-пакета:https://github.com/stujo/javascript-async-await
 Oscar Nevarez16 авг. 2017 г., 05:14
Ссылка не работает, не могли бы вы обновить?
 stujo01 авг. 2018 г., 00:13
Привет, Марти, я думаю, это зависит от того, установлен ли babel-узел глобально или просто в рамках проекта пакета, в моем случае, вероятно, он был установлен глобально.
 Marty18 июл. 2018 г., 21:40
Мне нужно было использовать ./node_modules/.bin/babel-node helloz.js вместо babel-node helloz.js
 stujo26 авг. 2017 г., 00:52
Ссылка, кажется, работает для меня, вы можете подтвердить?
 stujo03 сент. 2017 г., 20:57
ХОРОШО! Я думаю, что обнаружил проблему, спасибо
 Oscar Nevarez30 авг. 2017 г., 20:11
Клик снова и я получил тот же результат. Я вижу 404 на GitHub?

поэтому вы можете использоватьasyncawait модуль илиtranspile это с помощью Bable.

устанавливать

npm install --save asyncawait

helloz.js

var async = require('asyncawait/async');
var await = require('asyncawait/await');

(async (function testingAsyncAwait() {
    await (console.log("Print me!"));
}))();
 Phil27 нояб. 2016 г., 00:01
При использовании вышеуказанной библиотеки (asyncawait) жизненно важно использовать круглые скобки, чтобы заполнить await и async. В ES2017 await и async являются ключевыми словами. В библиотеке выше они являются функциями.

node v6.6.0

Если вы просто используете в разработке. Вы можете сделать это:

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

package.json будет так:

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

Создайте.babelrc запишите и напишите это:

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

а затем запустить свойasync/await скрипт такой:

./node_modules/.bin/babel-node script.js
 davey11 мая 2017 г., 15:54
спасибо, использование babel-plugin-transform-async-to-generator решает мою проблему при использовании uglify
 Aaron Halvorsen28 янв. 2019 г., 21:58
Вы можете развернуть свою функцию как NodeJS v6 или v8, убедитесь, что вы развернули как v8 (бета).

преобразование Асинхр-генератор а такжеспектрально-среда плагин вроде так:

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

package.json будет так:

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

Создайте.babelrc запишите и напишите это:

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

а потом счастливое кодирование сasync/await

 chainstair24 февр. 2019 г., 02:03
Если вы используете Visual Studio код для angular, вам не нужно выполнять какую-либо работу после установки npm сверху. Все будет установлено и настроено автоматически, но все равно спасибо!

Ваш ответ на вопрос