手写Promise.all
写前要点
- 知道all的返回参数。
- 知道用数组来记录结果。
- 知道只要有一个 reject 就整体 reject。
通过使用方法来反推代码怎么写,可很好想出思路。
代码实现
Promise.myAll = (promiseList) => {
return new Promise((resolve, reject) => {
const result = []
const length = promiseList.length
let count = 0
promiseList.map((promise, index) => {
promise.then((data) => {
result[index] = data
count += 1
if (count === length - 1) {
resolve(result)
}
}, (err) => {
reject(err)
})
})
})
}
// 测试代码
const promiseList = [Promise.resolve('1'), Promise.reject('2'), Promise.resolve('3')]
Promise.myAll(promiseList).then(data => console.log(data), err => console.error(err))