Ответ
Чтобы сбросить запрос в 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'ни, чтобы память не текла и багов не было. Красота, да и только!