> Как обработать ошибку, если хотя бы один из нескольких запросов не ответил в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для обработки ситуации, когда хотя бы один из нескольких запросов не ответил (например, из-за таймаута или сетевой ошибки), используйте Promise.allSettled() или комбинацию Promise.all() с индивидуальными обработчиками ошибок.
Пример с Promise.allSettled():
Этот метод ждет завершения всех промисов и возвращает массив объектов с результатами (status: "fulfilled" или status: "rejected"). Вы можете проверить, есть ли хотя бы один отклоненный запрос.
JAVASCRIPTasync function handleRequests(urls) {const promises = urls.map(url => fetch(url).then(res => res.json()));const results = await Promise.allSettled(promises);const hasError = results.some(result => result.status === 'rejected');if (hasError) {console.error('Хотя бы один запрос не ответил');// Дополнительная логика: повтор, логирование, частичная обработка}// Обработка успешных результатовconst successfulData = results.filter(result => result.status === 'fulfilled').map(result => result.value);return successfulData;}
Альтернатива с Promise.all() и catch:
Если нужно прервать выполнение при первой ошибке, используйте Promise.all(), но добавьте индивидуальные обработчики, чтобы преобразовать ошибки в успешные значения (например, null).
JAVASCRIPTasync function handleRequests(urls) {const promises = urls.map(url =>fetch(url).then(res => res.json()).catch(() => null) // заменяем ошибку на null);const results = await Promise.all(promises);if (results.some(result => result === null)) {console.error('Хотя бы один запрос не ответил');}return results.filter(result => result !== null);}
Ключевые моменты:
Promise.allSettled()- лучший выбор, если нужно дождаться всех запросов и обработать частичные результаты.Promise.all()сcatch- подходит, если ошибка одного запроса не должна блокировать остальные.- Для таймаутов используйте
AbortControllerили обертку сsetTimeout.
> Похожие задачи по frontend
Как реализовать декоратор функции в JavaScript, ограничивающий число вызовов и вызывающий колбэк при последнем вызове
Как обрабатывать массив результатов промисов в JavaScript и выводить success или fail в консоль
Как обработать результаты двух асинхронных запросов с условиями success, fail и timeout в JavaScript?
Как обрабатывать превышение лимита вызовов функции в JavaScript и что возвращать
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью