Какие вспомогательные инструменты нужны для обработки асинхронных ответов
Что проверяют
За формулировкой обычно стоит вопрос, как вы живёте с сетью в реальном интерфейсе: ошибки, отмена, гонки ответов, повторы и кэш. Следом часто дают сценарий: пользователь быстро печатает в поиске, а ответы приходят не по порядку.
Как отвечать
Идите слоями, от языка к библиотекам:
- промисы и
async/await: основа. Плюс комбинаторы:Promise.allпадает на первой ошибке,Promise.allSettledдожидается всех,Promise.raceберёт первый завершившийся,Promise.anyпервый успешный; - особенность
fetch: промис отклоняется только при сетевой ошибке, ответ 404 или 500 считается успешным, поэтомуresponse.okпроверяется руками. Axios по умолчанию бросает исключение на статус вне 2xx и умеет интерцепторы; - отмена:
AbortControllerиsignalвfetch,AbortSignal.timeout(ms)для таймаута. Это же лечит гонку: новый запрос отменяет старый, и устаревший ответ не перезапишет свежий; - библиотеки серверного состояния: TanStack Query, SWR, RTK Query. Дают кэш, дедупликацию одинаковых запросов, повторы и фоновое обновление. У TanStack Query в браузере по умолчанию три повтора с экспоненциальной задержкой и
staleTime: 0; - интерфейс: состояния загрузки, пустого результата и ошибки,
Suspenseи error boundary в React; - тяжёлая обработка ответа: Web Worker, чтобы разбор большого JSON не блокировал главный поток;
- тесты: MSW подменяет сеть на уровне запросов, и компонент проверяется без живого API.
Хорошо закончить мыслью, что складывать ответы сервера в Redux руками обычно лишнее: это работа кэша запросов, а в глобальном сторе остаётся клиентское состояние.
Где спотыкаются
Оборачивают fetch в try/catch и считают ошибки обработанными, хотя ответ 500 проходит как успешный.
Не отменяют запросы: при уходе со страницы или быстром вводе приходят устаревшие ответы, и на экране мелькает не тот результат.
Путают асинхронность с многопоточностью. JavaScript в браузере выполняет ваш код в одном потоке, промисы работают через очередь микрозадач, а параллельно считать умеет только воркер.