Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Как отменить запрос, если предыдущий ещё не завершился?

Вопрос проверяет, умеешь ли ты управлять жизненным циклом сетевых запросов и предотвращать гонки данных и лишнюю нагрузку.

Короткий ответ

Запрос отменяют, чтобы не обрабатывать устаревший ответ и не держать лишние соединения. В браузере для этого используют AbortController, передавая signal в fetch. Перед новым запросом предыдущий контроллер вызывают через abort(). Это особенно важно при polling, поиске по вводу и быстрых сменах фильтров.

Длинный ответ

При активном UI часто возникает ситуация, когда новый запрос важнее предыдущего.

Определение

Определение: Отмена запроса — это прерывание ещё не завершившегося HTTP-запроса, чтобы его результат не влиял на состояние приложения.

Зачем отменять запросы

  1. Избежать race condition

    • Старый запрос может завершиться позже нового и “перезатереть” актуальные данные.

  2. Снизить нагрузку

    • Сервер и браузер не тратят ресурсы на ненужные ответы.

  3. Предсказуемый state

    • В состоянии приложения всегда данные от последнего запроса.

Как это делается с fetch

  1. Создаётся AbortController

  2. Его signal передаётся в fetch

  3. Перед новым запросом вызывается 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);
    }
  }
}

Частые сценарии использования

  1. Поиск по вводу

    • Пользователь печатает → старые запросы отменяются.

  2. Polling

    • Новый цикл отменяет предыдущий, если тот завис.

  3. React effects

    • При смене props/filters cleanup-функция отменяет запрос.

Вывод

Отмена запросов — обязательная практика для динамичных интерфейсов: она защищает от гонок, уменьшает нагрузку и делает данные в UI актуальными.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Networks

Ключевые слова

#abort

#controller

#cancel

Подпишись на React Developer в телеграм