

新闻资讯
技术学院await 不阻塞线程但暂停当前 async 函数执行,仅在 async 函数内有效,本质是 Promise 语法糖,需配合微任务队列使用,传入非 Promise 值会自动包装,错误需 try/catch 捕获。
await 不会阻塞整个线程,但会暂停当前 async 函数内的后续代码执行,直到 Promise 解决。
你不能在普通函数或全局作用域中直接写 await,否则会报 SyntaxError: await is only。它本质是语法糖,底层仍基于 Promise 和微任务队列。
valid in async function
async function 内才能使用 await
await 仅在 ES Module(如 type="module" 的 script 或 Node.js 的 .mjs 文件)中合法await 会直接报错await 会自动调用右侧值的 .then() 方法。如果传入的是普通值(比如数字、字符串),它会被包装成已解决的 Promise,不会等待。
async function example() {
console.log('start');
const a = await 42; // 立即继续,a === 42
const b = await Promise.resolve(100); // 效果同上
const c = await fetch('/api'); // 真正等待网络响应
console.log('end');
}
await 123 等价于 Promise.resolve(123).then(v => v)
try/catch 捕获,否则导致 async 函数 rejectionawait someFunction() 等价于 someFunction().then(...) —— 它们语义相同,但错误传播和堆栈追踪行为有差异这是最容易误解的一点:await 让出控制权,把后续逻辑推入微任务队列,JS 引擎可以去处理其他任务(比如点击事件、定时器、其他 Promise 回调)。
await 在“等待”,但它不冻结浏览器或 Node.js 进程await,否则变慢:await a(); await b(); → 应改用 await Promise.all([a(), b()])
await 后的行,因为它们不在当前调用栈上真正容易被忽略的是:await 的“暂停”只对当前函数体生效,不影响外部同步代码;而错误未捕获时,async 函数返回的 Promise 会处于 rejected 状态——这点常导致上层调用方没处理,静默失败。