Promise.any() 是 ES2021(ES12) 新增的 Promise 方法,作用非常明确:
返回「第一个成功」的 Promise 全部失败了,才会进入失败状态。
1. 基本语法
ini
Promise.any([promise1, promise2, promise3])
.then(firstFulfilledValue => {
// 只要有一个成功,就进这里
})
.catch(error => {
// 全部都失败,才进这里
})
2. 简单示例
javascript
const p1 = Promise.reject('A 失败')
const p2 = Promise.resolve('B 成功')
const p3 = Promise.reject('C 失败')
Promise.any([p1, p2, p3]).then(res => {
console.log(res) // 'B 成功'
})
3. 全部失败时
会抛出一个 AggregateError,里面包含所有错误:
javascript
const p1 = Promise.reject('err1')
const p2 = Promise.reject('err2')
Promise.any([p1, p2]).catch(e => {
console.log(e) // AggregateError
console.log(e.errors) // ['err1', 'err2']
})
4. 和 Promise.race() 的区别(高频考点)
Promise.race():谁先完成就返回谁,不管成功失败Promise.any():只认第一个成功的,失败的都忽略,直到全部失败
5. 和 Promise.all() 的区别
Promise.all():必须全部成功,一个失败就整体失败Promise.any():只要一个成功,就成功
一句话总结: 想"只要有一个接口通了就行,其他挂了无所谓",就用 Promise.any() 。