Promise.any 返回首个 fulfilled 的 Promise 结果,忽略所有 rejected;全部 rejected 时抛出含 errors 数组的 AggregateError,适用于多源容错场景。

Promise.any 并不返回“首个成功任务”,而是返回“首个 fulfilled 的 Promise 结果”——它会忽略失败(rejected)的 Promise,只等待第一个成功的;如果全部失败,才抛出 AggregateError。
它和 Promise.race 的关键区别
很多人误以为 Promise.any 是“谁快谁先返回”,其实不是速度问题,而是状态优先级:
-
Promise.race:谁先 settle(无论 fulfilled 还是 rejected)就用谁的结果或错误 -
Promise.any:跳过所有 rejected,只等第一个 fulfilled;全 rejected 才整体失败
基本用法示例
下面代码中,虽然 p2 最快(10ms),但它被 reject;p1 50ms 后 resolve,成为首个成功结果:
const p1 = new Promise(r => setTimeout(() => r('first'), 50));
const p2 = Promise.reject('failed fast');
const p3 = new Promise(r => setTimeout(() => r('third'), 100));
Promise.any([p1, p2, p3])
.then(value => console.log(value)) // 输出: 'first'
.catch(err => console.error(err)); // 不会执行
注意全失败时的错误类型
当所有 Promise 都 rejected,Promise.any 拒绝时抛出的是 AggregateError,它的 errors 属性包含所有原始错误:
立即学习“Java免费学习笔记(深入)”;
Promise.any([
Promise.reject('a'),
Promise.reject('b')
]).catch(err => {
console.log(err instanceof AggregateError); // true
console.log(err.errors); // ['a', 'b']
});
实际适用场景
适合需要“至少一个可用”的容错场景,比如:
- 向多个镜像源请求同一资源,取最先成功的响应
- 并发调用多个备用 API,只要一个返回数据即可继续
- 避免因单点故障导致整个流程阻塞


















