Promise.all 的使用
官方解释如下:
介绍:
Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。
使用:
Promise.all
等待所有都完成(或第一个失败)。特点:
Promise.all
在任意一个传入的promise
失败时返回失败。例如,如果你传入的
promise
中,有四个promise
在一定的时间之后调用成功函数有一个立即调用失败函数,那么
Promise.all
将立即变为失败。
以上信息可以理解几点
1, 接受一个可以信息迭代类型的集合,常见的方式是 array [p1,p2,p3]
2,获取的到的结果只有两种:全部成功 或 1个失败
第一点好理解,就是把几个promise放在一个数组里,作为promise.all 的参数发送出去
第二点也好理解,就是 当数组中的promise都有了结果以后,
结果都是正常:
就会在all的then方法里获取一个数组[p1res,p2res,p3res],以数组形式的三个返回值,
但凡有一个不正常:
就会在all的catch方法里获取一个对象,不正常的返回结果
let p1 = new Promise(resolve => {
resolve('p1.....')
})
let p2 = new Promise(resolve => {
resolve('p2.....')
})
let p3 = new Promise(resolve => {
resolve('p3.....')
}
Promise.all([p1,p2,p3])
.then(res=>{
// 全部成功后的结果 [res1,res2,res3]
console.log('res',res)
})
.catch(err=>{
// 第一个错误的的结果 firstErrorOne
console.log('err',err)
})
以上 代码 某些业务 需要完全依赖3个promise的结果,才能继续往下走。
如果想要单独处理某一个,或者就算一个其中一个出错了,也要获取另外的结果
每个promise 都处理catch,在catch里返回一个对对象
写法1:---每个promise单独处理
let p1 = new Promise(ressolve => {
ressolve('p1.....')
}).catch((e)=>{
return Promise.resolve('p1..catch')
})
let p2 = new Promise(ressolve => {
ressolve('p2.....')
}).catch((e)=>{
return Promise.resolve('p2..catch')
})
let p3 = new Promise((ressolve,reject) => {
reject('p3.....')
}).catch((e)=>{
return Promise.resolve('p3..catch')
})
Promise.all([p1,p2,p3])
.then(res=>{
// res = [res1,res2,catch3]
console.log('res',res)
})
写法2:----所有promise,仅处理异常的promise
let p1 = new Promise(ressolve => {
ressolve('p1.....')
})
let p2 = new Promise(resolve => {
resolve('p2.....')
})
let p3 = new Promise((resolve, reject) => {
reject('p3.....')
})
Promise.all([p1, p2, p3].map(anyP => anyP.catch(error => error)))
.then(res => {
// res = [res1,res2,catch3]
console.log('res', res)
})