async函数中使用await仍报错,求Node.js语法错误解决方案
嘿,刚学JavaScript就碰到async/await的坑很正常,我来帮你排查这个SyntaxError: Unexpected identifier的可能原因:
可能的问题及对应解决方案
1. Node.js版本不支持async/await特性
async/await是ES2017的语法特性,Node.js从7.6.0版本开始才默认支持它。如果你的Node版本低于这个,解析器就会识别不了async或await关键字,从而抛出错误。
- 先检查你的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




