javascript手写一个promise.all
时间: 2023-02-09 20:38:51 浏览: 82
可以手写一个简单的 `promise.all` 函数,它接受一个 promise 对象数组作为参数,并返回一个新的 promise 对象:
```
function promiseAll(promises) {
return new Promise((resolve, reject) => {
// 存储所有 promise 返回值的数组
const values = []
// 已完成的 promise 计数器
let completed = 0
// 遍历 promise 数组
promises.forEach((promise, i) => {
promise.then(
value => {
// 将 promise 返回值存储在数组中
values[i] = value
// 增加已完成的 promise 计数器
completed++
// 如果所有 promise 都已完成,则解析最终的 promise
if (completed === promises.length) {
resolve(values)
}
},
error => {
// 如果有任何一个 promise 失败,则将错误作为参数拒绝最终的 promise
reject(error)
}
)
})
})
}
```
使用方法:
```
promiseAll([promise1, promise2, promise3]).then(values => {
// 所有 promise 都已完成,在此处使用返回值
console.log(values)
}).catch(error => {
// 任何一个 promise 失败,在此处处理错误
console.error(error)
})
```
注意:这是一个简单版本的 `promise.all` 函数,它没有实现所有标准实现的功能,例如等待非 Promise 参数的转换,或者在参数中包含迭代器而不是数组的情况下的特殊处理。