function promiseAll(promises) {
return new Promise((resolve, reject) => {
// 初始化一个数组来存储每个 Promise 的结果
const results = [];
// 初始化一个计数器来跟踪已完成的 Promise 数量
let completedCount = 0;
promises.forEach((promise, index) => {
// 为每个 Promise 添加 then 和 catch 处理程序
promise.then(result => {
results[index] = result;
completedCount++;
// 如果所有 Promise 都已完成,则解析新的 Promise
if (completedCount === promises.length) {
resolve(results);
}
})
.catch(error => {
// 当 Promise 失败时,立即拒绝新的 Promise
reject(error);
});
});
});
}
// 使用示例
const promise1 = new Promise((resolve) => setTimeout(() => resolve(1), 0));
const promise2 = new Promise((resolve) => setTimeout(() => resolve(2), 0));
const promise3 = new Promise((resolve) => setTimeout(() => resolve(3), 0));
promiseAll([promise1, promise2, promise3])
.then((results) => {
console.log(results); // 输出 [1, 2, 3](顺序可能与此不同,取决于 Promise 完成的时间)
})
.catch((error) => {
console.error(error);
});
手撕代码——Promise.all方法
最新推荐文章于 2024-06-07 23:26:45 发布