手写 Promise.all
确定参数和返回值:
- 接受一个可迭代类型的参数(此处用数组代替)。
- 返回值:
- 返回值是一个 Promise
- 成功时候的返回值是数组中所有 Promise 成功的结果,并且元素位置顺序和数组中顺序保持一致。
- 失败的时候,返回第一个失败的 Promise 的结果。
大致思路:
- 声明一个结果集
result = []
- 循环接收到的数组,调用每个数组的 then 方法:
- 如果成功,则把成功的结果
push 进 result里面,如果失败直接 reject
代码实现:
Promise.all2 = (arrayList) => {
return new Promise((resolve, reject) => {
const result = []
arrayList.map((item, index) => {
item.then((data) => {
result[index] = data
if (index >= arrayList.length - 1) {
resolve(result)
}
}, (reason) => {
reject(reason)
})
})
})
}