Promise 是构建可预测、可中断、可组合异步流程的基础设施,支持串行依赖(链式 .then)、并行协作(all/allSettled/race)、流程编排(复用与组合)及错误隔离恢复(.catch 降级)。

Promise 在复杂异步逻辑中不是“替代回调的工具”,而是构建可预测、可中断、可组合的异步流程的基础设施。它真正价值在于把零散的异步动作,组织成有状态、有顺序、有错误边界的执行链。
串行依赖:让后一步等前一步的结果
当后续操作必须基于上一步返回的数据时(比如获取用户 ID → 查订单 → 查物流),Promise 链式调用天然适配这种线性依赖:
- 每个 .then() 的回调函数接收上一个 resolve 的值,直接作为输入参数
- 若某步返回新 Promise(如另一个 fetch),链会自动等待它完成再进入下一步
- 错误只需在末尾加一个 .catch(),就能捕获整条链中任意环节的 reject
比起嵌套回调,代码扁平、逻辑清晰,也避免了手动传递参数和错误处理分散的问题。
并行协作:多个独立请求一起发,按需聚合结果
页面初始化常需同时拉取用户信息、菜单配置、未读消息等——它们互不依赖,但都影响首屏渲染。这时不用一个个 await,而是用 Promise 提供的静态方法精准控制:
- Promise.all():全部成功才继续,适合“缺一不可”的场景(如表单提交前校验所有字段)
- Promise.allSettled():不管成败都返回结果,适合容错型批量操作(如上报多条日志,允许个别失败)
- Promise.race():谁先完成就用谁,适合超时控制或 CDN 切换(如并发请求两个镜像地址,取响应最快的)
流程编排:把异步动作变成可复用、可中断的单元
Promise 本身可被传递、组合、缓存,这让它成为异步逻辑的“第一等公民”:
- 一个 API 封装函数可以只返回 Promise,调用方决定如何消费(链式、await、all、race)
- 通过 Promise.resolve().then(...) 可将同步逻辑无缝接入异步链,统一执行时机
- 结合定时器或条件判断,能构造带重试、防抖、节流的异步行为(如失败后延迟 1 秒重试最多 3 次)
错误隔离与恢复:不让一处失败拖垮整个流程
传统回调里一个出错可能让后续逻辑静默失效;而 Promise 提供明确的错误传播路径:
- .catch() 不仅捕获上一级 reject,还能在中间插入恢复逻辑(如 fallback 请求)
- 在 .catch 中 return 新 Promise,可让链继续往下走,实现“降级”而非中断
- 配合 async/await 的 try/catch,能用同步风格写异常分支,更贴近业务语义


















