Как сбросить запрос в fetch

Ответ

Чтобы сбросить запрос в fetch, можно использовать AbortController. Создайте экземпляр контроллера, передайте его signal в опции fetch, а затем вызовите abort() при необходимости.

const controller = new AbortController();
const signal = controller.signal;

fetch('https://api.example.com/data', { signal })
  .then(response => response.json())
  .catch(err => {
    if (err.name === 'AbortError') {
      console.log('Запрос отменён');
    } else {
      console.error('Ошибка:', err);
    }
  });

// Отмена запроса
controller.abort();

Это особенно полезно при отмене запросов при размонтировании компонента в React или при повторных запросах.

Ответ 18+ 🔞

Да ты посмотри, какой умный дядя придумал эту штуку — AbortController. Ну реально, а то раньше запрос летит в сеть, как хуй с горы, и остановить его — нихуя. А тут, ёпта, красота!

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

const controller = new AbortController();
const signal = controller.signal;

Сигнал этот, сука, как поводок для собаки. Пристёгиваешь его к fetch в опциях, и всё, запрос теперь на привязи.

fetch('https://api.example.com/data', { signal })
  .then(response => response.json())
  .catch(err => {
    if (err.name === 'AbortError') {
      console.log('Запрос отменён');
    } else {
      console.error('Ошибка:', err);
    }
  });

И если вдруг передумал — ну, пользователь свалил со страницы, или там новая кнопка нажалась — просто орешь этому контролёру: «А ну, отмена, блядь!»

controller.abort();

И запрос тут же, сука, обрывается. Не тянет больше эту нудную лямку. В консольке тебе вежливо так: «Запрос отменён». А если ошибка другая — ну, там сеть сдохла — то уж извини, браток, это уже не его епархия.

В React'е, например, вообще святое дело. Компонент размонтировался, а запрос ещё висит — так ты его, хитрожопого, нахуй abort'ни, чтобы память не текла и багов не было. Красота, да и только!