Своя реализация существующего метода и называется полифилом. Необходимо реализовать полифил стандартного метода 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), );