Sobes.tech
Middle+
20

Өзіңіздің promiseAll функцияңызды жүзеге асырыңыз, ол Promise.all-дың аналогы: уәделердің массивін қабылдайды, нәтижелердің массивімен бірге уәде қайтарады, бірінші қабылдамаған кезде reject-ті дереу шақырады.

Сұралған компаниялар
Т-БанкТ-Банк

AI-дан жауап

sobes.tech 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 сразу.