Sobes.tech
Middle+

Implementieren Sie Ihre eigene Funktion promiseAll, die ein Äquivalent zu Promise.all ist: nimmt ein Array von Promises, gibt eine Promise mit einem Array von Ergebnissen in der ursprünglichen Reihenfolge zurück, und bei der ersten Ablehnung — ruft sofort reject auf.

sobes.tech KI

Antwort von AI

Функция promiseAll принимает массив промисов и возвращает новый промис, который:

  • резолвится массивом результатов, если все промисы успешно завершились,
  • реджектится при первом же отклонённом промисе.

Пример реализации:

function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completed = 0;
    const total = promises.length;

    if (total === 0) {
      resolve([]);
      return;
    }

    promises.forEach((p, index) => {
      Promise.resolve(p)
        .then(value => {
          results[index] = value;
          completed += 1;
          if (completed === total) {
            resolve(results);
          }
        })
        .catch(err => {
          reject(err);
        });
    });
  });
}

Здесь важно сохранять порядок результатов, поэтому результат записывается по индексу. Если любой промис отклоняется, вызывается reject сразу.