Promise通过组合方法管理异步依赖:1. Promise.all并行执行,全成功才继续;2. Promise.allSettled并行执行,总返回各结果状态;3. .then链式调用实现串行依赖;4. Promise.race竞速取最快结果,支持超时降级。

Promise 对象本身不“管理”依赖,而是通过组合方式表达依赖关系。关键在于用 Promise.all、Promise.allSettled、Promise.race 和链式 .then() 来明确多个异步任务之间的执行逻辑:并行、串行、竞速或容错处理。
并行执行,全部成功才继续(常用)
适合多个独立接口同时请求,比如获取用户信息 + 获取权限列表 + 获取配置项。所有请求并发发起,等全部完成再统一处理结果。
- 用
Promise.all([p1, p2, p3]),返回一个新 Promise - 只要其中一个失败,整个就 reject,不会等其余完成
- 返回值是按顺序排列的数组,对应每个 Promise 的 fulfilled 值
并行执行,不管成败都返回结果(容错场景)
当某些请求失败不影响主流程时使用,比如埋点上报、非核心数据加载。
-
Promise.allSettled([p1, p2, p3])总是 resolve,返回每个 Promise 的状态对象({ status: 'fulfilled' | 'rejected', value | reason }) - 可遍历结果,单独判断每个子任务是否成功
串行执行,前一个结果传给下一个(有依赖)
适合需要上一步返回值作为下一步参数的场景,比如先登录获取 token,再用 token 请求用户数据。
- 用链式写法:
login().then(token => getUser(token)).then(user => render(user)) - 每个
.then()返回的新 Promise 决定下一步是否执行 - 避免嵌套回调,保持扁平结构
竞速执行,取最快完成的结果(超时/降级)
常用于兜底策略,比如主服务响应慢时 fallback 到备用接口,或设置超时控制。
-
Promise.race([fetchMain(), fetchBackup()])返回第一个 settled 的 Promise 结果 - 结合
Promise.reject()和setTimeout可实现超时中断:Promise.race([apiCall(), timeout(5000)])


















