语法错误:缺少)参数列表后,使用异步时

Sed*_*rei 16 javascript node.js async-await telegram-bot

我使用时为什么会收到此错误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);
});
Run Code Online (Sandbox Code Playgroud)

错误:

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

我正在使用node.js v6.11.0和"dependencies":

{ "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" },
Run Code Online (Sandbox Code Playgroud)

Sov*_*iut 18

您的NodeJS版本(6.11 LTS)太旧,不支持这些async/await功能.语法错误是Javascript解释器无法识别async令牌并使参数混淆的结果.

升级到NodeJS 7.6或更高版本.https://www.infoq.com/news/2017/02/node-76-async-await

在以前的版本中,执行异步行为的唯一方法是使用promises.


Thi*_*ddi 6

如果您不想/无法更新您的节点版本,请尝试使用 babel 预设。我在使用 ES6 时遇到了同样的错误(节点 v6.9.1)。

只需将这两个模块添加到您的依赖项中

npm install --save babel-preset-es2015 babel-preset-stage-0
Run Code Online (Sandbox Code Playgroud)

.babelrc使用以下代码将文件添加到您的根目录:

{ "presets": ["es2015", "stage-0"] }
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用它,请babel-cli使用babel-node命令安装并运行您的应用程序

sudo npm install -g babel-cli

babel-node app.js
Run Code Online (Sandbox Code Playgroud)