Skip to content

Promise 与 async/await:状态机、错误传播与并发组织

主题边界

  • Promise 的价值在于表达一次异步计算的完成、失败与链式传播。
  • async/await 只是基于 Promise 的语法展开,底层仍遵循 thenable 吸收和微任务调度。

机制与流程

  • Promise 一旦从 pending 进入 fulfilled 或 rejected 就不可逆;then/catch/finally 会派生出新的 Promise 链。
  • await 会暂停当前 async 函数,把后续代码包装进微任务,等待目标 Promise 完成后继续。
  • 错误会沿 Promise 链冒泡,直到被 catch 或外层宿主处理。

关键差异

  • Promise.all 适合“全成功才继续”,allSettled 适合收集全部结果,any 适合抢首个成功结果。
  • 串行 await 可读性高但吞吐低;显式并发组织更适合批量请求。

边界条件

  • Promise 不能取消,取消通常依赖 AbortController、业务标记或宿主 API 自身支持。
  • 在循环里无脑 await 容易把本可并行的任务串行化。

工程落点

  • 接口层设计要同时考虑错误传播、超时、取消与并发限制,而不只是“拿到返回值”。
  • 复杂前端应用里的竞态问题,往往来自多个 Promise 链对同一状态的写入顺序不可控。

相关主题