手写 Promise.all

112 阅读1分钟

手写 Promise.all

确定参数和返回值:

  • 接受一个可迭代类型的参数(此处用数组代替)。
  • 返回值:
    • 返回值是一个 Promise
    • 成功时候的返回值是数组中所有 Promise 成功的结果,并且元素位置顺序和数组中顺序保持一致。
    • 失败的时候,返回第一个失败的 Promise 的结果。

大致思路:

  • 声明一个结果集 result = []
  • 循环接收到的数组,调用每个数组的 then 方法:
    • 如果成功,则把成功的结果 pushresult里面,如果失败直接 reject

代码实现:

Promise.all2 = (arrayList) => {
    return new Promise((resolve, reject) => {
        const result = []
        // let count = 0
        arrayList.map((item, index) => {
            item.then((data) => {
                result[index] = data
                if (index >= arrayList.length - 1) {
                    resolve(result)
                }
                // count = count + 1
                // if (count === arrayList.length - 1) {
                //     resolve(result)
                // }
            }, (reason) => {
                reject(reason)
            })
        })
    })
}