await后跟普通值会自动包装为Promise.resolve(value)并立即fulfilled,跟Promise则等待其settled;普通值无延迟,需延时应显式创建Promise;多个await默认串行,并行需用Promise.all。

await 后面跟普通值,会自动包装成已解决的 Promise;跟 Promise 对象,则等待其状态变为 fulfilled 或 rejected。
await 处理普通值(如数字、字符串、对象等)
JavaScript 会把普通值隐式转换为 Promise.resolve(value),即立即进入 fulfilled 状态,后续代码同步执行(但仍在微任务队列中,等当前同步任务结束后才继续)。
例如:
async function test() {
console.log('start');
const a = await 42; // 等价于 await Promise.resolve(42)
console.log(a); // 42
console.log('end');
}
test();
// 输出顺序:start → 42 → end
await 处理 Promise 对象
如果 await 后面是一个 Promise 实例,函数会暂停执行,直到该 Promise 被 resolve 或 reject:
- 若 Promise 成功(fulfilled),await 表达式结果为 resolve 的值;
- 若 Promise 失败(rejected)且未被 catch,会抛出错误,中断后续执行(需 try/catch 捕获);
- 注意:即使 Promise 已经 settled(比如已 resolve),await 仍会确保在下一轮微任务中继续执行,不会“跳过”异步调度。
常见误区与注意事项
- await 不要求右侧一定是 Promise,任何值都合法,引擎会自动调用
Promise.resolve()包装; - 不要误以为
await 100会“等待 100ms”,它只是立即返回 100,无延迟;需要延时请用await new Promise(r => setTimeout(r, 100)); - 多个 await 是串行执行的,想并行请用
Promise.all([p1, p2])包裹后 await; - await 只能在 async 函数或模块顶层(ES2022+)中使用,否则语法报错。


















