Вопрос проверяет, умеешь ли ты управлять жизненным циклом сетевых запросов и предотвращать гонки данных и лишнюю нагрузку.
Запрос отменяют, чтобы не обрабатывать устаревший ответ и не держать лишние соединения. В браузере для этого используют AbortController, передавая signal в fetch. Перед новым запросом предыдущий контроллер вызывают через abort(). Это особенно важно при polling, поиске по вводу и быстрых сменах фильтров.
При активном UI часто возникает ситуация, когда новый запрос важнее предыдущего.
Определение: Отмена запроса — это прерывание ещё не завершившегося HTTP-запроса, чтобы его результат не влиял на состояние приложения.
Избежать race condition
Старый запрос может завершиться позже нового и “перезатереть” актуальные данные.
Снизить нагрузку
Сервер и браузер не тратят ресурсы на ненужные ответы.
Предсказуемый state
В состоянии приложения всегда данные от последнего запроса.
Создаётся AbortController
Его signal передаётся в fetch
Перед новым запросом вызывается abort()
let controller;
async function loadData() {
if (controller) {
controller.abort(); // отменяем предыдущий запрос
}
controller = new AbortController();
try {
const res = await fetch("/api/data", {
signal: controller.signal,
});
const data = await res.json();
// обновляем state
} catch (e) {
if (e.name !== "AbortError") {
// реальная ошибка
console.error(e);
}
}
}
Поиск по вводу
Пользователь печатает → старые запросы отменяются.
Polling
Новый цикл отменяет предыдущий, если тот завис.
React effects
При смене props/filters cleanup-функция отменяет запрос.
Отмена запросов — обязательная практика для динамичных интерфейсов: она защищает от гонок, уменьшает нагрузку и делает данные в UI актуальными.