Создаёте контроллер, передаёте его signal в fetch, при отмене вызываете abort(). Промис запроса (и чтения тела) завершится ошибкой abort.
const controller = newAbortController();
fetch('/api/search?q=js', { signal: controller.signal })
.then((r) => r.json())
.catch((err) => {
if (err.name === 'AbortError') return; // ожидаемоthrow err;
});
// пользователь ушёл со страницы / новый ввод
controller.abort();
Сигнал после abort остаётся aborted — для следующего запроса нужен новыйAbortController.
Как думает сеньор
Отмена на клиенте не гарантирует rollback на сервере. Мутации делайте идемпотентными. Abort — control flow, не «авария».
Итог
AbortController + signal в fetch — стандарт отмены; обрабатывайте AbortError отдельно.
На собеседовании
Ожидают не заученную таблицу, а умение связать концепцию с багом из практики: что сломается, если выбрать неправильный вариант, и какой код вы напишете в реальном PR. Короткий пример и граничный случай обычно ценятся выше длинной теории.
Как отменить web-запрос через `AbortController`? · Sobeso