Promise.all2 = function (iterators) {
return new Promise((resolve, reject) => {
if (!iterators || iterators.length === 0) {
resolve([])
} else {
// 计算器,用于判断所有任务是否执行完成
let count = 0;
// 结果数组
let result = [];
// 执行数组长度
let len = iterators.length
for (let i = 0; i < len; i++) {
// 考虑到iterators[i]可能是普通对象,则统一包装为Promise对象
Promise.resolve(iterators[i]).then((data) => {
// 按顺序保存对应的结果
result[i] = data;
// 判断++count 的次数是否等于 传入执行数组的长度
if (++count === len) {
resolve(result);
}
}, (err) => {
// 任何一个Promise对象执行失败,则调用reject()方法
reject(err);
})
}
}
})
}
const f1 = new Promise((resolve, reject) => {
console.log('enter f1')
resolve('f1')
})
const f2 = new Promise((resolve, reject) => {
console.log('enter f2')
reject('err')
})
const f3 = new Promise((resolve, reject) => {
console.log('enter f3')
resolve('f3')
})
Promise.all2([f1, f2, f3]).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
console