自己实现一个PromiseAll和PromiseAllseted

1、自己实现一个promiseAll

    Promise.all() 方法接收一个由 Promise 对象组成的数组作为参数,当所有 Promise 都成功完成时,返回的 Promise 对象就会成功完成,然后将结果以数组形式返回;而只要有一个 Promise 失败了,Promise.all() 返回的 Promise 对象就会失败,这时第一个被拒绝的 Promise 的结果会被传递给该 Promise.all() 返回的 Promise 对象。

自己实现一个类似的函数,可以按照以下步骤:

1、创建一个新 Promise 对象并返回。
2、在该函数中创建一个空的数组,用于存放每个 Promise 对象的结果。
3、使用 forEach(或 for 循环)遍历传入的 Promise 数组,并对每个 Promise 对象调用 .then() 方法。
4、在 .then() 方法中,将该 Promise 的结果添加到结果数组中。
5、如果其中有某个 Promise 被拒绝,将其拒因传递给新 Promise 对象的 .reject() 方法。
6、当所有 Promise 都处理完毕后,将结果数组传递给新 Promise 对象的 .resolve() 方法。

function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let count = promises.length;
    promises.forEach((promise, index) => {
      promise.then(result => {
        results[index] = result;
        count--;
        if (count === 0) { // 所有 Promise 都已完成
          resolve(results);
        }
      }).catch(error => {
        reject(error); // 任一 Promise 被拒绝,整个 Promise.all() 失败
      });
    });
  });
}

注意事项:

  • 传入的参数必须是一个数组,并且每个元素都是 Promise 对象。

  • 返回的 Promise 对象在所有输入的 Promise 都成功完成时才会成功,如果其中有任何一个被拒绝,将返回第一个被拒绝的 Promise 的结果。

你可能感兴趣的:(js,面试题,javascript,开发语言,ecmascript)