手写Promsie.all方法
需求分析
- Promsie.all方法接收一个参数 Promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型),返回一个新的Promsie
- 数组里其中一个Promise失败会导致Promise.all 失败
- 所有Promise resolve 回调的结果是一个数组
代码实现
Promise.myAll = function(list) {
const results = []
let count = 0
return new Promise((resolve, reject) => {
list.map((item, index) => {
// 把数据都处理成Promise
Promise.resolve(item).then(
res => {
results[index] = res
count += 1
if (count == list.length) {
resolve(results)
}
},
err => {
reject(err)
}
)
})
})
}
demo
参考
developer.mozilla.org/zh-CN/docs/…