Необходимо реализовать упрощенную версию стандартного метода Promise.all
.
Допустим, у нас есть три промиса:
"🍎"
через 2 секунды"🍋"
через 3 секунды"🍉"
через 1 секундуФункция all
принимает массив промисов и возвращает новый промис. Через 3 секунды он резолвится масивом результатов переданных промисов. Порядок значений должен соответствовать порядку промисов в массиве.
Гарантируется, что входящие промисы никогда не станут rejected
.
all([p1, p2, p3]).then(arr => { console.log(arr); // arr === ["🍎", "🍋", "🍉"] });
Полноценную версию нужно реализовать в задаче all.
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")); all([p1, p2, p3, p4]).then( value => console.log("1 >>>", value), reason => console.log("2 >>>", reason), );