Отмена запроса
Вопрос
Как отменить сетевой запрос и зачем это нужно?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
AbortController создаёт signal, который передаётся в fetch
controller.abort() отклоняет промис ошибкой AbortError
AbortError нужно отличать от настоящей ошибки при обработке
в React отмена идёт в функции очистки useEffect
без отмены получаем гонку: ответ на старый запрос перезаписывает новый
один signal можно передать нескольким запросам сразу
Что могут спросить следом
- Как ещё можно решить гонку, если отмены нет
- Отменяет ли abort работу на сервере
- Как сделать таймаут запроса через AbortSignal
Разбор
AbortController даёт signal, который передаётся в fetch; вызов abort()
отклоняет промис с AbortError. В обработчике его надо отличать от настоящего сбоя,
иначе покажешь пользователю ошибку на собственной отмене.
В React отмена живёт в функции очистки эффекта: при смене запроса или размонтировании старый запрос гасится. Без этого классическая гонка - пользователь быстро набрал в поиске, ответ на первый запрос пришёл последним и затёр актуальный результат.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.