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

Node.js顶级await使用差异:为何部分场景无语法错误?

顶级await在ES模块和CommonJS中的差异原因

核心原因是两段代码用了不同的Node.js模块系统,Node.js对顶级await的支持规则和模块系统直接绑定:

  • 第一段代码是ES模块(用import语法导入模块)
    Node.js从v14.8.0开始允许在ES模块的顶级作用域直接使用await,不需要嵌套在async函数里。ES模块会把顶级await当作模块加载流程的一部分,等await关联的Promise完成后,模块才会被其他模块导入,所以这段代码能正常跑起来。

  • 第二段代码是CommonJS模块(用require语法导入模块)
    CommonJS模块系统是同步加载设计,从一开始就不支持顶级await,所以直接在顶级作用域写await getActivity()会触发语法错误。

要让第二段代码正常运行,有两种简单方案:

  1. 改成ES模块:把文件后缀改成.mjs,或者在项目package.json里加"type": "module",再把require换成import语法
  2. 把await放到自执行的async函数里,代码调整如下:
const axiosRequest = require('axios')
async function getActivity() {
    try {
        let response = await axiosRequest('https://www.boredapi.com/api/activity')
        console.log("why am I here1?")
        return response.data.activity;
    } catch (e) {
        console.log("error = " + e)
    }   
}

// 用自执行async函数包裹
(async () => {
    await getActivity()
})()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:07:41