通过 for-in 实现
const PromiseAll = interator => {
// 将传入的参数转化为数组
const promises = Array.from(interator);
// 获取数组长度
const length = promises.length;
// 判断是否遍历完成
let index = 0;
// 接收数据
let data = [];
return new Promise((resolve, reject) => {
for (let i in promises) {
promises[i]
.then(result => {
// 将执行的结果传递给接收数据的数组
data[i] = result;
// 遍历完成
if (++index === length) {
resolve(data);
}
})
.catch(err => {
// 错误处理
reject(err);
});
}
});
};
const promise1 = Promise.resolve("promise1");
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, "promise2");
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, "promise3");
});
PromiseAll([promise1, promise2, promise3]).then(result => {
console.log(result);
});
通过 forEach 实现
const promiseAll = interator => {
const promises = Array.from(interator);
const length = promises.length - 1;
let resultArr = [];
return new Promise((resolve, reject) => {
promises.forEach((item, index) => {
item
.then(res => {
resultArr[index] = res;
if (length === index) {
resolve(resultArr);
}
})
.catch(err => {
reject(err);
});
});
});
};
const promise1 = Promise.resolve('111');
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, '222')
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, '333')
})
_promiseAll([promise1, promise2, promise3]).then(res => {
console.log(res)
})