You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:40