async/await 通过将异步操作写成同步风格,简化 Promise.then 链,提升可读性与错误处理能力;支持串行 await、Promise.all 并行、try/catch 统一捕获错误,但需注意 async 声明、作用域限制及避免滥用导致性能下降。

用 async/await 替代冗长的 Promise.then 链,核心是把异步操作写得像同步代码一样直观,减少嵌套、提升可读性和错误处理能力。
把 Promise 链直接转成 await 序列
多个串行异步操作(如依次请求用户、订单、商品)原本容易写成多层 .then 嵌套,现在只需用 await 逐行等待:
- 每个
await后面跟一个 Promise,执行会暂停直到它完成,再继续下一行 - 不用手动传参,上一步的结果可直接赋值给变量,自然用于下一步
- 避免了
.then(res => ...)的括号嵌套和作用域混乱
用 try/catch 统一捕获错误
async/await 让错误处理回归熟悉的同步风格:
- 所有
await行的 Promise 拒绝(reject),都会被外层try/catch捕获 - 不再需要为每个
.then配一个.catch,也不用担心漏掉某一层的错误分支 - 可以集中处理不同步骤失败的共性逻辑(如弹提示、跳转登录页)
并行请求用 Promise.all + await
如果多个请求彼此独立,想同时发起、等全部完成,就别用串行 await,改用 Promise.all:
立即学习“Java免费学习笔记(深入)”;
const [user, order] = await Promise.all([fetchUser(), fetchOrder()])- 这样比挨个
await更快,且解构赋值让结果组织清晰 - 注意:只要其中一个 Promise 失败,
Promise.all就整体 reject,如需容错可用Promise.allSettled
避免常见陷阱
async/await 看似简单,但几个细节容易出错:
- 函数必须用
async声明,否则await会报语法错误 -
await只在当前函数内有效,不能跨函数“传染”,回调里不能直接await - 不要滥用
await——本可并行的操作写成串行,会拖慢整体响应 - 返回值始终是 Promise,即使函数里
return 123,调用方仍需.then或await获取


















