Почему моя реализация Promise.race не работает? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть задача, где я должен реализовать функцию Promise.race, не используя ее самостоятельно.

Я уже нашел код, который должен работать, но консоль выдает ошибку

"TypeError: promise is not a function".

function promiseRace(...promises) {
return new Promise((resolve, reject) => {
    for(const promise of promises)
       promise.then(resolve, reject);
 })
};

Я тоже пробовал это, но он показывает ту же ошибку (о p):

const promiseRace = (...promises) {
  new Promise((res, rej) => {
    promises.forEach(p => p.then(res).catch(rej));
  })
};

Кто-нибудь знает, почему он не работает?

1 Ответ

1 голос
/ 19 апреля 2019

В последнем примере отсутствует оператор возврата во 2-й строке: *return* new Promise(...

Ваш первый пример работает правильно (см. Ниже), но обратите внимание, что стандарт Promise.race принимает параметры массива, тогда как ваша реализация принимает переменные параметры:

function promiseRace(...promises) {
  return new Promise((resolve, reject) => {
    for (const promise of promises)
      promise.then(resolve, reject);
  })
}

let slowPromise = new Promise(r => setTimeout(() => r('slow'), 2000));
let quickPromise = new Promise(r => setTimeout(() => r('quick'), 1000));

promiseRace(slowPromise, quickPromise).then(a => console.log('promiseRace', a));

Promise.race([slowPromise, quickPromise]).then(a => console.log('Promise.race', a));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...