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) {
修复了问题。
为什么我在使用 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) {
修复了问题。