顶层 await 仅在 ES 模块中有效:浏览器需 <script type="module">,Node.js 需 .mjs、"type": "module" 或 --input-type=module;它使模块异步化,影响导入顺序与同步导出。

在 JavaScript 中,顶层 await 是允许的,但仅限于模块(.mjs 文件或 type="module" 的脚本),不能用于普通脚本(.js 且非模块环境)。
确保运行在模块环境中
顶层 await 必须在 ES 模块上下文中使用。浏览器中需通过 <script type="module"> 引入;Node.js 中需满足以下任一条件:
- 文件扩展名为
.mjs - 或
package.json中设置了"type": "module" - 或用
node --input-type=module执行内联代码
直接在模块顶层写 await
无需包裹在 async function 中,可直接使用:
const data = await response.json();
console.log(data);
这段代码会暂停模块初始化,直到 Promise 解决,之后才执行后续模块代码(包括其他导入的模块,如果它们依赖本模块)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
注意模块执行顺序和依赖影响
顶层 await 会让模块变成“异步模块”,其 import 会被视为动态且延迟完成。这意味着:
- 依赖该模块的其他模块会等待它
await完成后再执行 - 不能在
import语句前用await初始化同步导出值(如export const x = ...必须等await后才能确定) - 不支持在
import声明之后、顶层await之前做同步导出赋值
不支持的场景
以下写法会报错:
- 在普通
<script>(非 module)中使用顶层await - 在 Node.js 的 CommonJS 文件(
.cjs或未设type: module的.js)中使用 - 在函数外部、但模块顶层有
return、break等非法语句

















