Promise.any返回首个成功Promise的值,全部失败则抛出AggregateError;它不取消其余Promise,需手动处理;错误需用instanceof AggregateError捕获;ES2021特性,旧环境需polyfill或包装实现。

Promise.any 用于等待多个 Promise 中第一个成功(fulfilled)的结果,只要有一个成功就立即返回该值;如果全部失败(rejected),则抛出一个 AggregateError 错误。
基本用法:传入 Promise 数组
它接收一个可迭代对象(通常是数组),里面包含多个 Promise 实例:
const result = await Promise.any([fetch('/api/a').then(r => r.json()),
fetch('/api/b').then(r => r.json()),
fetch('/api/c').then(r => r.json())
]);
console.log(result); // 第一个成功响应的数据
注意:失败的 Promise 不会中断执行
其他未完成的 Promise 会继续运行(不会自动取消),只是 Promise.any 不等它们。你需自行处理取消逻辑(如 AbortController)。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 只关心“最快的成功”,不关心谁快、谁慢、谁失败
- 哪怕前两个 5s 后失败,第三个 100ms 后成功,结果就是第三个的值
- 所有 Promise 都失败时,抛出 AggregateError,可用 try/catch 捕获
错误处理:捕获 AggregateError
不能用普通 catch(err) 直接拿到具体错误信息,因为它是聚合错误:
const data = await Promise.any([promiseA, promiseB, promiseC]);
console.log('首个成功结果:', data);
} catch (err) {
if (err instanceof AggregateError) {
console.error('全部失败,错误列表:', err.errors);
} else {
console.error('其他错误:', err);
}
}
兼容性与降级方案
Promise.any 是 ES2021(ES12)特性,现代浏览器和 Node.js 16+ 原生支持。若需兼容旧环境:
- 使用 polyfill
- 手动实现(核心逻辑:用 Promise.race + 过滤 reject)
- 或改用
Promise.race+ 包装:把每个 Promise 改为「成功则 resolve,失败则忽略」,但要注意无法区分全失败场景

















