promise.any() 返回首个成功promise的结果,全失败时抛出含所有错误的aggregateerror;它忽略拒绝、只等待首个履行,与promise.race()(首个完成即结束)不同。

Promise.any() 用于等待多个 Promise 中第一个成功(fulfilled)的结果,只要有一个成功就立即返回该值;如果全部失败(rejected),则抛出一个 AggregateError。
基本用法:传入 Promise 数组
它接收一个可迭代对象(通常是数组),里面每个元素都应是 Promise 实例:
- 只要有一个 Promise 成功,
Promise.any()就以该结果 fulfilled - 所有 Promise 都失败时,它会 rejected,并携带一个
AggregateError,包含所有错误
简单示例:模拟 API 请求竞争
比如同时调用多个备用接口,取最快返回成功的那个:
const fetchFromA = () => fetch('/api/a').then(r => r.json());
const fetchFromB = () => fetch('/api/b').then(r => r.json());
const fetchFromC = () => fetch('/api/c').then(r => r.json());
Promise.any([fetchFromA(), fetchFromB(), fetchFromC()])
.then(result => console.log('首个成功结果:', result))
.catch(err => {
if (err instanceof AggregateError) {
console.error('全部失败,错误列表:', err.errors);
}
});
注意点:和 Promise.race() 的区别
Promise.any() 只关心“成功”,不把 rejection 当作结束信号;而 Promise.race() 是“谁先完成(无论成功或失败)就用谁”:
-
race():第一个 settle(fulfill 或 reject)就结束 -
any():忽略 rejection,只等第一个 fulfill;全 reject 才失败
兼容性与 Polyfill
Promise.any() 是 ES2021 新增特性,现代浏览器和 Node.js(v16.0+)已支持。若需兼容旧环境,可用 polyfill 或手动实现:
- 推荐使用
core-js或es-shim提供的 polyfill - 简易手写逻辑:用
Promise.allSettled()+ 过滤找出首个 fulfilled 结果(但无法真正“中断”其他 Promise)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











