Promise.all
Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。
上面的概念可能很官方,简单的说就是,当你有多个promise请求的时候,你希望这些请求都成功了再执行某些逻辑,那你可以使用 Promise.all() 方法来实现,把你想要执行的逻辑放在Promise.all() 的 resolve 里面,但是要注意的是,只要你的多个promise请求中有一个执行了 reject 回调,那么 Promise.all() 就会立刻抛错,并且 reject 的是第一个抛出的错误。
Promise.all([
promise1,
promise2,
]).then(res => {
console.log(res[0]) // promise1的请求成功结果
console.log(res[1]) // promise2的
}).catch(err => {
// promise1或者promise2只要有一个请求reject就会执行这里的逻辑
})
Promise.allSettled
Promise.allSettled() 方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。
当您有多个彼此不依赖的异步任务成功完成时,或者您总是想知道每个promise的结果时,通常使用它。
同样的,你有多个请求,但是你只想这些请求都请求完成后执行某些逻辑,注意,是请求完成,并不关注它们请求成功还是失败,那么就可以使用 Promisse.allSettled()。
Promise.allSettled([
promise1,
promise2
]).then(res => {
console.log(res[0]) // 这是promise1的请求结果(包括请求状态等信息)
console.log(res[0].status) // 这是promise1的请求状态
})