Sobes.tech
Назад к вопросам
Middle+
4

Реализуйте свою функцию promiseAll, которая является аналогом Promise.all: принимает массив промисов, возвращает промис с массивом результатов в исходном порядке, при первом rejected — сразу вызывает reject.

Компании, где спрашивали
Т-БанкТ-Банк

Ответ от нейросети

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