SyntaxError: missing ) after argument list, When using async

SyntaxError: missing ) after argument list, When using 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 和 "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" },

您的 NodeJS 版本 (6.11 LTS) 太旧,不支持 async/await 功能。语法错误是 Javascript 解释器无法识别 async 标记并对参数感到困惑的结果。

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

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

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

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

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

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

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

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

sudo npm install -g babel-cli

babel-node app.js

如果您在较新版本的 Node 中看到此错误,可能是语法错误或其他一些错误在 Node 指出的行之前。

例如,考虑下面的片段。

router.get("/", function (req, res, next) {
    try {
        res.json(await mySvc.myFunc());
    } catch (err) {
        console.error(err.message);
        next(err);
    }
});

使用 node -v 报告 v14.17.6,得到:

myapp $ DEBUG=myapp:* npm start

> myapp@0.0.0 start /home/me/myapp
> node ./bin/www

/home/me/myapp/routes/myroute.js:7
        res.json(await mySvc.myFunc());
                 ^^^^^

SyntaxError: missing ) after argument list

当然,错误出现在代码段的第一行。在该行添加一个 async,因此,

router.get("/", async function (req, res, next) {

修复了问题。