You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

async函数中使用await仍报错,求Node.js语法错误解决方案

嘿,刚学JavaScript就碰到async/await的坑很正常,我来帮你排查这个SyntaxError: Unexpected identifier的可能原因:

可能的问题及对应解决方案

1. Node.js版本不支持async/await特性

async/await是ES2017的语法特性,Node.js从7.6.0版本开始才默认支持它。如果你的Node版本低于这个,解析器就会识别不了asyncawait关键字,从而抛出错误。

  • 先检查你的Node版本:在终端里运行 node -v 查看版本号。
  • 解决办法:
    • 最推荐的方式是升级Node.js到最新稳定版(现在LTS版本都已经完全支持async/await了);
    • 如果暂时没法升级,可以尝试用--harmony-async-await参数启动Node(比如node --harmony-async-await your-file.js),不过这是旧版本的临时兼容方案,还是升级更靠谱。

2. await没有放在async函数内部

你代码里的then(async result => { ... })这个箭头函数是标记了async的,里面用await没问题,但如果你的代码里其他地方的await出现在非async函数里,就会触发这个错误。比如:

  • 直接在全局作用域用await
  • 在普通的非async函数(比如没有加async关键字的函数、回调)里用await
  • 排查建议:检查所有使用await的代码行,确保它们都包裹在async声明的函数(包括普通函数、箭头函数)内部。

3. 代码存在语法错误

你给出的代码片段最后是els...,应该是else的拼写不全吧?如果代码里还有括号不匹配、关键字拼写错误、语句未闭合这类问题,Node.js的解析器也会抛出类似的语法错误,有时候错误提示可能不会直接指向问题点。

  • 排查建议:把完整的代码补全后,先检查基础语法:比如用编辑器的语法检查功能,或者把代码拆成小片段逐步测试,找到出错的位置。

快速测试环境的小方法

你可以先写一段极简的async/await代码测试你的Node环境是否支持:

async function testAsync() {
  const msg = await Promise.resolve('测试成功!');
  console.log(msg);
}
testAsync();

运行这段代码,如果能正常输出测试成功!,说明环境没问题,那问题就出在你自己的代码里;如果还是报错,那就是Node版本的问题了。

内容的提问来源于stack exchange,提问作者Takase

火山引擎 最新活动