重写Promise.all

113 阅读1分钟
function customPromiseAll(promises) {
  return new Promise((resolve, reject) => {
    let results = [];
    let completedPromises = 0;

    promises.forEach((promise, index) => {
      promise.then((result) => {
        results[index] = result;
        completedPromises++;

        if (completedPromises === promises.length) {
          resolve(results);
        }
      }).catch((error) => {
        reject(error);
      });
    });

    if (promises.length === 0) {
      resolve(results);
    }
  });
}

// 使用自定义的 Promise.all 处理两个示例异步任务
let promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise 1 已完成');
  }, 1000);
});

let promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise 2 已完成');
  }, 2000);
});

customPromiseAll([promise1, promise2])
  .then((results) => {
    console.log(results); // 所有 Promise 都已完成时输出结果
  })
  .catch((error) => {
    console.error(error); // 如果任一 Promise 失败则捕获错误
  });

这段代码通过自定义函数 customPromiseAll 来实现了一个简单的 Promise.all 功能,用于处理多个 Promise 对象,并在它们都成功完成后执行特定的操作。请注意,这只是一个简单的实现方式,实际上 Promise.all 还有更多复杂的行为和边界情况需要考虑。