Appearance
Promise.any
跟
Promise.all
相反,这是只要有一个成功,那就是成功;只有所有的都 fulfilled 才失败
主要区别于Promise.all()
Promise.all()
- 只要有一个 reject 那么就立即结束
Promise.allSettled()
- 不管各自的处理结果,而是等所有的都执行结束才返回
Promise.any()
- 只要有一个 resolve 那就返回这个 resolve 的结果,所有的都 reject 才返回 error
语法
js
Promise.any(iterable)
栗子
js
const pErr = new Promise((resolve, reject) => {
reject("总是失败")
})
const pSlow = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "最终完成")
})
const pFast = new Promise((resolve, reject) => {
setTimeout(resolve, 100, "很快完成")
})
Promise.any([pErr, pSlow, pFast])
.then(value => {
console.log(value)
// pFast fulfils first
})
.catch(err => {
console.log(err)
// 结果为 : AggregateError: All promises were rejected
})
// 期望输出: "很快完成"
返回结果
成功了则返回第一个成功的结果值
失败了则在 catch 中返回一个 AggregateError
实例,这是 Error
的子类
如:
- 成功:
很快完成
- 失败:
AggregateError: All promises were rejected
重点
- 跟
Promise.all
、Promise.allSettled
不同的是其返回结果是resolve的值