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

JavaScript使用await报仅在async函数有效语法错误是何原因?

运行代码时控制台抛出错误:

Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules

错误原因

报错核心是await的使用不符合JavaScript语法规则:
await关键字仅允许在两种场景下使用:

  • 被async关键字标记的异步函数内部
  • ES模块的顶层作用域
    你贴出的代码是在普通脚本的全局作用域直接调用await,既没有包裹在async函数内,当前运行环境也没有把该脚本识别为ES模块,因此直接抛出语法错误。
修复方案

你可以根据自己的运行场景二选一:

方案1:将异步逻辑包裹在async函数中(兼容所有支持async/await的环境)

把所有用到await的逻辑放到async标记的函数内部,再调用该函数即可,修改后的代码如下:

let user = {
    name: 'George',
    surname: 'Arqael'
};

async function regUserRequest() {
    let regUser = await fetch(url, {
        method: 'post',
        headers: {
            'Content-type': 'application/json; charset=utf-8'
        },
        body: JSON.stringify(user)
    });

    let result = await regUser.json();
    console.log(result);
}

// 执行异步请求逻辑
regUserRequest();

注意:该方案建议在函数内部添加try/catch块,捕获网络请求失败、响应解析失败等异常,避免出现未捕获的Promise错误。

方案2:使用ES模块顶层await(适配现代运行环境)

如果你的运行环境满足要求(浏览器Chrome 89+/Firefox 89+/Safari 15+、Node.js 14.8+),可以直接将脚本声明为ES模块,无需包裹函数即可直接在顶层使用await:

  • 浏览器环境:引入脚本时给script标签添加type="module"属性
    <script type="module" src="你的脚本路径.js"></script>
    
  • Node.js环境:将脚本后缀改为.mjs,或者在项目的package.json中添加"type": "module"配置
    设置完成后你最初写的代码无需额外修改即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:12:33