Своя реализация существующего метода и называется полифилом. Необходимо реализовать полифил стандартного метода Promise.race.
raceФункция race принимает iterable, например, Array или Set. У iterable нет длины, но, например, по нему можно пройти циклом for-of.
raceФункция race возвращает промис, который завершается значением и статусом первого завершившегося промиса из коллекции. Если в iterable есть элементы, не являющиеся промисом, то итоговый промис зарезолвится первым из них.
"🐎" через 2 секунды"🐢" через 5 секунд"👻" через 1 секундуТогда race принимает эти промисы и возвращает новый промис. Через 1 секунду он реджектится значением "👻"
Теперь пусть в коллекции 3 таких промиса:
"🐎" через 2 секунды"🐢" через 5 секунд"👻" через 3 секундыТогда race принимает эти промисы и возвращает новый промис. Через 2 секунды он резолвится значением "🐎"
const rand = () => Math.random() * 2000; const p1 = new Promise(r => setTimeout(r, rand(), "A")); const p2 = new Promise(r => setTimeout(r, rand(), "B")); const p3 = new Promise(r => setTimeout(r, rand(), "C")); const p4 = new Promise(r => setTimeout(r, rand(), "D")); race([p1, p2, p3, p4]).then( value => console.log("1 >>>", value), reason => console.log("2 >>>", reason), );