手撕代码——Promise.all方法

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);
  });

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值