Promise.any等待第一个成功Promise并返回其结果;若全失败则抛出AggregateError。适用于多API备用请求、只需一个成功结果的并发任务等场景,与Promise.race不同,它忽略拒绝只关注首个履行。

Promise.any 用于等待一组 Promise 中第一个成功(fulfilled)的结果,只要有一个成功就立即返回该结果;如果全部失败(rejected),则抛出一个 AggregateError 错误。
基本用法:传入 Promise 数组
它接收一个可迭代对象(通常是数组),里面包含多个 Promise:
fetch('/api/user'),
fetch('/api/backup-user'),
Promise.reject('timeout')
]);
console.log(result); // 第一个成功响应的 Response 对象
注意:失败的 Promise 不会阻塞,但全失败会报错
Promise.any 只关心“是否有至少一个成功”,不关心其他 Promise 是仍在进行还是已失败。但若所有 Promise 都 rejected,它会拒绝并带上 AggregateError:
await Promise.any([
Promise.reject('err1'),
Promise.reject('err2')
]);
} catch (error) {
if (error instanceof AggregateError) {
console.log('全部失败:', error.errors); // ['err1', 'err2']
}
}
常见适用场景
- 请求多个备用 API 接口(如主服务 + 备用服务),取最快返回的成功响应
- 并发执行多个独立异步任务,只需一个结果即可继续(如获取用户信息、配置、权限中任一成功即可渲染基础界面)
- 带超时控制的竞速逻辑(配合
Promise.race([promise, timeout()])更常见,但any更适合“必须成功一个”的语义)
和 Promise.race 的关键区别
-
Promise.race返回第一个 settled(无论 fulfilled 还是 rejected)的结果 -
Promise.any忽略 rejected,只等第一个 fulfilled;全 rejected 才 reject - 所以
any更适合“容错式竞速”——你信任至少一个能成功


















