JavaScript Promise.any 竞态成功
Promise.any(ES2021):首个fulfilled即返回/Promise.allSettled所有完成/Promise.race最快完成(无论fulfilled/rejected)、AggregateError所有都rejected时抛出、实际应用(多CDN取最快资源) · 难度:入门 · +10XP
Promise.any —— 谁先成功就用谁的结果
ES2021的Promise.any:传入多个Promise,返回第一个fulfilled的结果。如果全部rejected,则抛出AggregateError。
对比Promise三兄弟
| 方法 | 行为 | 失败处理 |
|---|---|---|
| Promise.all | 全部成功才成功 | 一个失败就失败 |
| Promise.race | 第一个完成的(无论成败) | 可能返回失败 |
| Promise.any | 第一个成功的 | 全部失败才失败 |
实战:多CDN容灾
const data = await Promise.any([
fetch('https://cdn1.example.com/data.json'),
fetch('https://cdn2.example.com/data.json'),
fetch('https://cdn3.example.com/data.json'),
]); // 哪个CDN先返回就用哪个的结果
动手练习
- 基础练习:用Promise.any同时请求3个不同的API,用最快的那个结果。
- 进阶应用:实现"多备份CDN"策略——主CDN挂了自动用备份CDN。
- 项目实战:在关键资源加载中用Promise.any提高可用性。