Как сделать функцию, которая принимает массив промисов и возвращает результат того, который завершился первым?
Всем здравствуйте, необходимо написать функцию, которая принимает массив промисов и возвращает результат того, который завершился первым. Если первый промис выдал ошибку - то вернуть ее. Пример:
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) {
if (promises.length === 0) return Promise.resolve([]);
const copy = [...promises];
return new Promise((resolve, reject) => {
let count = 0;
for (let i = 0; i < promises.length; i++) {
promises[i].then(res => {
copy[i] = res;
if (++count === promises.length) resolve(copy);
}).catch(err => reject(err));
}
});
}
Не проходит один тест: "должна возвращать результат первого выполнившегося промиса", что надо исправить?
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Такое?
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])
.then(console.log)
.catch(err => console.log('Ошибка', err))
//
function promiseRace(arr = []) {
if (!arr.length) return Promise.resolve(null)
return new Promise((resolve, reject) => {
for (let i = 0; i < arr.length; i++) {
arr[i]
.then(resolve)
.catch(reject)
}
})
}