2026年5月30日 02:24

Promise.any() 有什么作用?和 Promise.race 有什么区别?

Promise.any() 的作用是:一组 Promise 里只要有一个成功,就立刻返回这个成功结果;只有全部失败时,才会 reject,并抛出 AggregateError。它适合“多个候选源,谁先成功用谁”的场景,比如多 CDN 拉资源、多个镜像接口兜底。面试里要强调:它忽略失败,只关心第一个成功;这和 Promise.race() 谁先 settled 就返回完全不同。

追问

Promise.any 和 Promise.race 最大区别是什么?

race 看第一个完成,不管成功还是失败;any 看第一个成功,失败会被暂时忽略,除非全部失败。

全部失败时会发生什么?

会 reject 一个 AggregateError,里面的 errors 保存所有失败原因。不要只 catch 后打印 message,最好把 errors 也记录下来。

它和 Promise.all 有什么区别?

all 要全部成功才成功,一个失败就失败;any 只要一个成功就成功。一个适合“都要”,一个适合“有一个可用就行”。

实际项目里怎么用?

适合容灾兜底,不适合支付、写入、下单这类不能重复尝试的操作。并行请求多个源时也要考虑取消慢请求或控制成本。

写段代码

javascript
try { const data = await Promise.any([ fetch('/cdn-a/config.json'), fetch('/cdn-b/config.json') ]); console.log(await data.json()); } catch (e) { console.error(e.errors); }
标签:Promise