Проверяет понимание разницы между Promise.race и Promise.any, что важно для корректной обработки асинхронных операций и выбора стратегии ожидания.
Оба метода принимают итерируемый набор промисов и возвращают новый промис, но ведут себя по-разному при ошибках. Ключевое отличие — как они реагируют на reject.
Возвращает промис, который завершается (resolve или reject) так же, как только первый завершившийся промис из набора. То есть гонка: кто первый — тот и определяет результат.
const p1 = new Promise((res) => setTimeout(() => res('ok'), 100));
const p2 = new Promise((_, rej) => setTimeout(() => rej('fail'), 50));
Promise.race([p1, p2])
.then(console.log) // не выполнится
.catch(console.error); // 'fail' — p2 отклонился первым
Возвращает промис, который резолвится значением первого успешно выполненного промиса. Отклонённые промисы игнорируются, пока есть шанс на успех. Если все промисы отклонятся, возвращается AggregateError со списком ошибок.
const p1 = new Promise((_, rej) => setTimeout(() => rej('fail1'), 50));
const p2 = new Promise((res) => setTimeout(() => res('ok'), 100));
Promise.any([p1, p2])
.then(console.log) // 'ok'
.catch(console.error); // не выполнится
Итог: используйте Promise.race для гонки с учётом ошибок, а Promise.any — когда нужно дождаться первого успеха, игнорируя неудачи.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию