SyntaxError: отсутствует) после списка аргументов, при использовании async

Почему я получаю эту ошибку Когда я использую async?

Мой код:

bot.onText(/\/start/, async  msg => {
  const opts = {
    parse_mode: 'Markdown' ,
    reply_markup: JSON.stringify({
      keyboard: StartKeyboard,
      resize_keyboard: true,
      one_time_keyboard: true
    })
  };
  await bot.sendMessage(msg.chat.id, 'Hi', opts);
});

Ошибка:

bot.onText(/\/start/, async  msg => {
                      ^^^^^
SyntaxError: missing ) after argument list

Я использую node.js v6.11.0 с "зависимостями":

{ "babel-polyfill": "^6.23.0",
  "cheerio": "^1.0.0-rc.2",
  "dotenv": "^4.0.0",
  "firebase": "^4.1.2",
  "firebase-admin": "^5.0.0",
  "node-telegram-bot-api": "^0.27.1",
  "request": "^2.81.0" },

Ответ 1

Ваша версия NodeJS (6.11 LTS) устарела и не поддерживает функции async/await. Синтаксическая ошибка - результат того, что интерпретатор Javascript не распознает токен async и не запутывается в аргументах.

Обновите до NodeJS 7.6 или новее. https://www.infoq.com/news/2017/02/node-76-async-await

В предыдущих версиях единственным способом выполнения асинхронного поведения было использование обещаний.

Ответ 2

Если вы не хотите/не можете обновить версию node, попробуйте использовать пресетов babel. У меня была такая же ошибка с использованием ES6 со шуткой (node v6.9.1).

Просто добавьте эти два модуля в свои зависимости

npm install --save babel-preset-es2015 babel-preset-stage-0

И добавьте файл .babelrc в корневой каталог с помощью следующего кода:

{ "presets": ["es2015", "stage-0"] }

И если вы еще не используете его, установите babel-cli и запустите приложение с помощью команды babel-node

sudo npm install -g babel-cli

babel-node app.js