1. 相近方法:
注:这里的p1等的都是promise对象;
(一) 第一组
(1)Promise.race([p1,p2,p3])
用这个方法别忘了用.then和.catch去捕捉第一个完成的promise的resolve或者reject返回;
(2)Promise.any([p1,p2,p3])
用这个方法只需要.then去捕捉第一个resolve的返回即可;
下面是两种方法的代码测试:(推荐大家试一下,不要只看概念)
const p1 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + 1)
console.log('s1')
}, 1000)
console.log('p1 finished')
})
}
const p2 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(data + 1)
console.log('s2')
}, 2000)
console.log('p2 finished')
})
}
const p3 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + 1)
console.log('s3')
}, 3000)
console.log('p3 finished')
})
}
const p4 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + 1)
console.log('s4')
}, 4000)
console.log('p4 finished')
})
}
const p5 = (data) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data + 1)
console.log('s5')
}, 1000)
console.log('p5 finished')
})
}
Promise.any([p1(1),p2(2),p3(3),p4(4)])
.then((res)=>{
console.log(res,'any')
return Promise.race([p3(3),p4(4)])
})
.then((res)=>{
console.log(res,'any结束了')
})
Promise.race([p1(1),p2(2)])
.then((res)=>{
console.log(res,'race')
return Promise.race([p3(3),p4(4)])
})
.then((res)=>{
console.log(res,'race结束了')
})
总结:如同上面的字面意思 Promise.any 只会捕捉第一个完成的且为resolve的promise对象的值,而 Promise.race 则是捕捉第一个完成的promise对象的值不论其是resolve还是reject的值;
(二) 第二组
(1)Promise.all([p1,p2,p3])
(2)Promise.allSettled([p1,p2,p3])
这两个方法的区别这里不做赘述,我之前有一篇文章以及相应的代码,这是链接
Promise.all 与 Promise.allSettled 的区别
2. 其他方法
(一) 基础方法
(1)Promise.resolve(value)
(2)Promise.reject(value)
这两个方法都是把传入的value作为一个promise对象返回出去,并把value的值作为参数给到.then或者.catch,但不改变原有value的值;