
实现一个 Promise.all
js
// 传入参数为一个空的可迭代对象,则直接进行resolve
// 如果参数中有一个promise失败,那么Promise.all返回的promise对象失败
// 在任何情况下,Promise.all返回的promise的完成状态的结果都是一个数组
Promise.all = function (promises) {
return new Promise((resolve, reject) => {
let result = []
let index = 0
let len = promises.length
if (len === 0) {
resolve(result)
return
}
for (let i = 0; i < len; i++) {
// 为什么不直接[promises[i].then,因为promise[i]可能不是一个promise
Promise.resolve(promises[i])
.then((data) => {
result[i] = data
index++
if (index === len) resolve(result)
})
.catch((err) => {
reject(err)
})
}
})
}
