Есть несколько сценариев, в которых вы хотели бы отменить запрос сервера. Например, ваш пользователь запрашивает отчет, на получение которого уходит много времени, и он передумал и запросил другой отчет. Что ты будешь делать? Здесь может оказаться очень кстати AbortController.
В этом посте я кратко объясню, что такое AbortController и как его использовать для отмены запросов на выборку.
Прекратите получение, пожалуйста
AbortController - это объект, который может помочь вам прервать запросы на выборку. Как ты это делаешь? Прежде всего, создайте новый AbortController:
const abortCtrl = new AbortController();
Если у вас есть экземпляр AbortController, вы можете использовать его API для прерывания запросов на выборку. AbortController включает одно свойство signal и одну функцию abort. Свойство signal используется для получения объекта AbortSignal. Этот объект используется запросом выборки для связи между запросом выборки и AbortController. Вы передаете объект AbortSignal для извлечения функции как часть его объекта параметров. Вот пример использования:
const abortCtrl = new AbortController(); const signal = abortCtrl.signal; fetch(url, { signal }).then((response) => { ... }).catch((e) => { ... });
Как только функция выборки включает сигнал, вы можете прервать запрос выборки. Если вам нужно отменить запрос, все, что вам нужно сделать, это вызвать функцию AbortController abort. Например:
abortCtrl.abort();
Запросы, которые были прерваны, приведут к отклонению обещания выборки с помощью AbortError. Это означает, что функция обратного вызова catch будет работать с объектом AbortError, который имеет код ошибки 20. Используя эти знания, вы можете добавить логику для обработки сценария прерывания:
const abortCtrl = new AbortController(); const signal = abortCtrl.signal; fetch(url, { signal }).then((response) => { ... }).catch((e) => { if (error.code === 20) { // abort occurred // Do something after abort occurred } });
Резюме
В этом коротком сообщении объясняется, что такое AbortContoller и как его использовать в коде. Дайте мне знать в комментариях, если вы сочли это полезным.