JavaScript中async/await异常:async函数出现‘Undefined token function’语法错误
解决async函数定义时的"Undefined token function"语法错误
嘿,我看你在使用async/await和Promise的时候碰到了这个语法错误,结合你的代码和错误提示,我来帮你排查下核心问题和解决办法:
核心原因:运行环境不支持async/await语法
async/await是ES2017(ES8)引入的语法特性,Node.js 7.6.0及以上版本才正式支持。如果你的代码运行环境(比如本地Node.js、AWS Lambda运行时等)版本低于这个,就会触发"Undefined token function"这类语法解析错误——因为旧版本的JS引擎根本不认识async这个关键字。
具体解决步骤
1. 检查并升级Node.js版本
- 先在终端运行命令查看当前版本:
node -v - 如果版本低于v7.6.0,直接去Node.js官网下载安装LTS长期支持版本(建议选14.x及以上,兼容性更好)。
- 如果是在AWS Lambda、阿里云函数计算这类平台,进入函数配置页面,把运行时切换为Node.js 14.x/16.x/18.x等较新版本。
2. (可选)配置语法转译(仅当必须使用旧环境时)
如果因为某些限制无法升级环境,那就需要用Babel把ES2017代码转译为旧版本JS能识别的语法:
- 安装依赖:
npm install @babel/core @babel/preset-env @babel/cli --save-dev - 在项目根目录创建
.babelrc文件:{ "presets": ["@babel/preset-env"] } - 转译代码并运行:
npx babel src --out-dir dist node dist/your-file.js
3. 顺便修复代码里的逻辑小问题
虽然这不是当前语法错误的原因,但你的httpGet函数里有个状态码判断的bug:
原来的代码里直接拿response对象和数字比较,应该用response.statusCode获取状态码:
// 错误写法 if (response < 200 || response > 299) { reject(new Error('Failed to load page, status code: ' + response)); } // 正确写法 if (response.statusCode < 200 || response.statusCode > 299) { reject(new Error('Failed to load page, status code: ' + response.statusCode)); }
总结
优先尝试升级Node.js运行环境版本,这是解决这个语法错误最直接有效的办法。升级后你的async/await代码就能正常解析运行了。
内容的提问来源于stack exchange,提问作者Hackbrew
相关产品推荐
相关产品推荐

