复习笔记——手写Promise.all

86 阅读1分钟

了解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 去拿到他们的结果。

大概要点

  1. 知道要在Promise上写而不是在原型上写。
  2. 知道all的参数(Promise数组)和返回值(新Promise对象)。
  3. 知道用数组来记录结果。
  4. 知道只要有一个reject就整体reject。