Ответ вслух Junior Промисы и async/await спрашивают часто обновлено

Отмена запроса

Вопрос

Как отменить сетевой запрос и зачем это нужно?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

AbortController даёт signal, который передаётся в fetch; вызов abort() отклоняет промис с AbortError. В обработчике его надо отличать от настоящего сбоя, иначе покажешь пользователю ошибку на собственной отмене.

Что должно прозвучать в ответе

  • AbortController создаёт signal, который передаётся в fetch

  • controller.abort() отклоняет промис ошибкой AbortError

  • AbortError нужно отличать от настоящей ошибки при обработке

  • в React отмена идёт в функции очистки useEffect

  • без отмены получаем гонку: ответ на старый запрос перезаписывает новый

  • один signal можно передать нескольким запросам сразу

Что могут спросить следом

  • Как ещё можно решить гонку, если отмены нет
  • Отменяет ли abort работу на сервере
  • Как сделать таймаут запроса через AbortSignal

Разбор

AbortController даёт signal, который передаётся в fetch; вызов abort() отклоняет промис с AbortError. В обработчике его надо отличать от настоящего сбоя, иначе покажешь пользователю ошибку на собственной отмене.

В React отмена живёт в функции очистки эффекта: при смене запроса или размонтировании старый запрос гасится. Без этого классическая гонка - пользователь быстро набрал в поиске, ответ на первый запрос пришёл последним и затёр актуальный результат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме