【高频面试题】Promise系列(all与allSettled)

447 阅读2分钟

目录

  1. Promise.all的使用
  2. Promise.allSettled的使用

一、Promise.all的使用

1) 有一个reject时

Promise.all返回的是promise所以可以继续调用promise原型上的方法,只是没有值而已

reject时失败的回调只能被``捕获一次在then中捕获的话在catch中就不会再被捕获

all中,有一个任务失败了,就会直接返回这个失败的结果。其他的忽略。 只有任务数组中全部都成功了,才会把所有的任务结果全部返回。


const p1 = Promise.resolve(1)
const p2 = Promise.resolve(2)
const p3 = Promise.reject(0)

Promise.all([p1,p2,p3]).then(data=>{
    console.log('resolve:',data)
},err=>{
    console.log('then 中 reject:',err)
}).catch(err=>{
    console.log('catch 中 reject:',err)
}).then(data=>{// Promise.all返回的是promise所以可以继续调用promise原型上的方法,只是没有值而已
    console.log(111,data)
})

image.png

2) 全部resolve时

all 全部成功时才会全部返回并且返回了一个数组接收一个数组返回一个数组

const p1 = Promise.resolve(1)
const p2 = Promise.resolve(2)
const p3 = Promise.resolve(0)

Promise.all([p1,p2,p3]).then(data=>{
    console.log('resolve:',data)
},err=>{
    console.log('then 中 reject:',err)
}).catch(err=>{
    console.log('catch 中 reject:',err)
}).then(data=>{// Promise.all返回的是promise所以可以继续调用promise原型上的方法,只是没有值而已
    console.log(111,data)
})

image.png

二、Promise.allSettled的使用

const p1 = Promise.resolve(1)
const p2 = Promise.resolve(2)
const p3 = Promise.reject(0)

Promise.allSettled([p1,p2,p3]).then(data=>{
    console.log('resolve:',data)
},err=>{
    console.log('then 中 reject:',err)
}).catch(err=>{
    console.log('catch 中 reject:',err)
})

image.png

参考

总结

  • Promise.all返回的是promise所以可以继续调用promise原型上的方法只是没有值而已

  • Promisereject时失败的回调只能被``捕获一次在then中捕获的话在catch中就不会再被捕获

  • all 全部成功时才会全部返回并且返回了一个数组接收一个数组返回一个数组

  • allSettledall一样,入数组,出数组。 allSettled入参的数组中有reject的也会全部返回, 这是他比all优势的地方

  • Promise.resolve(1).then(data=>{console.log(data)}); // 1

Promise.allSettled() 与 Promise.all() 各自的适用场景

Promise.allSettled() 更适合:

  • 彼此不依赖,其中任何一个被 reject ,对其它都没有影响
  • 期望知道每个 promise 的执行结果

Promise.all() 更适合:

  • 彼此相互依赖,其中任何一个被 reject ,其它都失去了实际价值