Promise.all = function (promises) {
const result = []; // 存储promise成功数据
let count = 0; // promise总数
let fulfilledCount = 0; //完成promise数量
return new Promise((resolve, reject) => {
// 捕获代码执行中的异常
try {
for (let p of promises) {
// i为遍历的第几个promise
// 使用let避免形成闭包问题
let i = count;
count++; // promise总数 + 1
Promise.resolve(p)
.then((data) => {
fulfilledCount++; // 完成的promise数量+1
// 将第i个promise成功数据赋值给对应位置
result[i] = data;
if (count === fulfilledCount) {
// 代表最后一个promise完成了
// 返回result数组
resolve(result);
}
})
.catch(reject);
// 传入promise数量为0
if (count === 0) {
resolve(result); // 返回空数组
}
}
} catch (error) {
reject(error);
}
});
};
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
// 普通promise
const p2 = Promise.resolve(2);
const p3 = 3;
// 失败的promise
const p4 = Promise.reject("error");
//
Promise.all([p1, p2, p3])
.then((data) => console.log(data)) // [1, 2, 3]
.catch((error) => console.log(error));
var b
Promise.all("family").then((data) => b= data)
setTimeout(() => {
console.log(b)
})
console