web-dev-qa-db-ja.com

SyntaxError:missing)引数リストの後、非同期を使用する場合

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" },
15

NodeJS(6.11 LTS)のバージョンが古すぎて、async/await機能をサポートしていません。構文エラーは、Javaインタープリターがasyncトークンを認識せず、引数について混乱する結果です。

NodeJS 7.6以降にアップグレードします。 https://www.infoq.com/news/2017/02/node-76-async-await

以前のバージョンでは、非同期動作を実行する唯一の方法は promises を使用することです。

16
Soviut

ノードのバージョンを更新したくない、または更新できない場合は、babelプリセットを使用してみてください。 jest(ノードv6.9.1)でES6を使用すると、同じエラーが発生しました。

これらの2つのモジュールを依存関係に追加するだけです

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
3
Thiago Loddi