Почему результат undefined?

Напишите функцию, которая принимает массив промисов и возвращает результат того, который завершился первым. При этом если первый промис выдал ошибку - необходимо вернуть ее. Причем, решение не должно вызывать Promise.race стандартной библиотеки.

Пример:
const firstPromise = new Promise((resolve) =>
  setTimeout(() => resolve(300), 300)
);
const secondPromise = new Promise((resolve) =>
  setTimeout(() => resolve(200), 200)
);
const thirdPromise = new Promise((resolve) =>
  setTimeout(() => resolve(100), 100)
);
promiseRace([firstPromise, secondPromise, thirdPromise]); // 100


function promiseRace(promises) {
          let isResolve = false;
          [...promises].forEach((prom) =>
            prom.then((p) => {
              if (p && !isResolve) {
                isResolve = true;
                if (p instanceof Error) throw p;
                return p;
              }
            })
          );
      }

если перед return ставлю console.log, то консоль результат выдает верный, а ретурн undefined. Решение не прошу, но хочу ответ на вопрос, почему так?
  • Вопрос задан
  • 943 просмотра
Решения вопроса 1
Fragster
@Fragster
помогло? отметь решением!
Потому что в приведенном коде возврата из promiseRace на самом деле нет. В данном случае нужно переписать примерно так:
https://jsfiddle.net/e6cgyt21/
тут используется та особенность, что Promise может выполниться только один раз и он выполнится первым же выполнившимся промисом из массива.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы