Promise.any返回第一个成功fulfilled的Promise结果,全部失败时抛出AggregateError;与Promise.race不同,它忽略rejected,只等待首个fulfilled。

Promise.any 用于等待多个 Promise 中第一个成功(fulfilled)的结果,只要有一个成功就立即返回该结果;如果全部失败(rejected),则抛出一个 AggregateError。
基本用法和返回值
它接收一个 Promise 实例数组,返回一个新的 Promise:
- 只要数组中有一个 Promise 成功,新 Promise 就以该值 fulfilled,并忽略其余结果(包括其他成功或失败)
- 只有当所有 Promise 都 rejected 时,才以
AggregateErrorrejected
简单示例
模拟三个异步请求,其中第二个最快返回成功结果:
const p1 = new Promise(resolve => setTimeout(() => resolve('first'), 3000));
const p2 = new Promise(resolve => setTimeout(() => resolve('second'), 1000));
const p3 = new Promise((_, reject) => setTimeout(() => reject('failed'), 2000));
Promise.any([p1, p2, p3])
.then(result => console.log(result)) // 输出: 'second'
.catch(err => console.error(err)); // 不会执行,因为有成功项
处理全部失败的情况
当所有 Promise 都失败时,会进入 catch,错误是 AggregateError 类型,其 errors 属性包含所有 rejection 原因:
立即学习“Java免费学习笔记(深入)”;
- 可用
err.errors获取具体失败列表 - 注意:不能直接用
err.message获取完整信息,需遍历errors
Promise.any([
Promise.reject('a'),
Promise.reject('b')
])
.catch(err => {
console.log(err instanceof AggregateError); // true
console.log(err.errors); // ['a', 'b']
});
和 Promise.race 的区别
两者都“抢第一个”,但判断标准不同:
- Promise.race:谁先 settle(无论 fulfill 还是 reject)谁赢
- Promise.any:只认 fulfill,reject 全部忽略,直到出现第一个成功
例如:若最快的是一个 reject,race 立即失败;而 any 会继续等下一个 fulfill。


















