了解Promise.all
Promise.myAll = function(){
const result = []
let count = 0
return new Promise((resolve,reject)=>{
list.map((promise,index)=>{
promise.then((r)=>{
results[index] = r
count += 1
if(count === list.length){
resolve(results)
}
},(reason)=>{
reject(reason)
})
})
})
}
Promise.all这个API是干嘛的呢?
用于用于将多个 Promise 实例,包装成一个新的 Promise 实例。
all 方法让我们能并行地执行多个异步函数,所有异步函数都执行结束后,才会执行相应的回调函数。
all 方法接受一个数组,数组中每个元素都必须是一个 Promise 实例。返回的结果也是一个数组,里面是每个 Promise 实例执行的结果。
只有当多个 Promise 实例执行的结果都是成功的,才会去调用 .then 的第一个函数,只要有一个失败了,就立刻 reject 。
现在有三个请求,第一个请求失败了,我还想拿到第二个请求的结果,用 Promise.all() 如何来做?
在把这三个 Promise 实例放进 all() 方法之前, 先对这三个 Promise 做一个处理。先用 .then 去拿到他们的结果。
大概要点
- 知道要在Promise上写而不是在原型上写。
- 知道all的参数(Promise数组)和返回值(新Promise对象)。
- 知道用数组来记录结果。
- 知道只要有一个reject就整体reject。