Top-level await cho phép dùng await trực tiếp ở cấp module (ngoài hàm async), chỉ trong ES module — không dùng được trong CommonJS hay script thường.
// db.js — ES module
const conn = await connect(process.env.DB_URL);
export { conn };Ảnh hưởng tới load order: một module có top-level await trở thành async module. Bất kỳ module nào import nó sẽ đợi nó settle xong rồi mới chạy phần body của mình — biểu đồ phụ thuộc tự động tuần tự hóa. Hình dung: module cha tạm "dừng" cho đến khi mọi dependency async đã sẵn sàng.
Dùng tốt cho:
- Khởi tạo phụ thuộc bất đồng bộ (DB connection, đọc config từ network) ngay tại module.
- Dynamic import có điều kiện: const mod = await import(condition ? './a.js' : './b.js').
- Fallback resource: await import('./fast.js').catch(() => import('./slow.js')).
Lưu ý (bẫy): nếu await chậm hoặc treo, nó chặn toàn bộ cây import phía dưới khởi động — đừng đặt việc nặng/không quan trọng ở top level. Lỗi reject ở top-level await làm việc evaluate module thất bại.