Spec-Zone.ru › Web APIs

AbortController

Базовая поддержка Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2019 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Интерфейс AbortController представляет собой объект контроллера, который позволяет прерывать один или несколько веб-запросов по мере необходимости.

Вы можете создать новый объект AbortController с помощью конструктора AbortController(). Взаимодействие с асинхронной операцией выполняется с помощью объекта AbortSignal.

Конструктор

AbortController()

Создает новый экземпляр объекта AbortController.

Свойства экземпляра

AbortController.signal Только для чтения

Возвращает экземпляр объекта AbortSignal, который можно использовать для взаимодействия с асинхронной операцией или для её прерывания.

Методы экземпляра

AbortController.abort()

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

Примеры

Примечание: Дополнительные примеры приведены в справочнике AbortSignal.

В следующем фрагменте мы хотим загрузить видео с помощью Fetch API.

Сначала мы создаем контроллер, используя конструктор AbortController(), затем получаем ссылку на связанный объект AbortSignal с помощью свойства AbortController.signal.

При инициализации запроса fetch мы передаем AbortSignal в качестве опции внутри объекта опций запроса ({signal} ниже). Это связывает сигнал и контроллер с запросом fetch и позволяет прервать его, вызвав AbortController.abort(), как показано ниже во втором обработчике событий.

Когда вызывается abort(), обещание fetch() отклоняется с исключением DOMException, имеющим имя AbortError.

let controller;
const url = "video.mp4";

const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  if (controller) {
    controller.abort();
    console.log("Download aborted");
  }
});

async function fetchVideo() {
  controller = new AbortController();
  const signal = controller.signal;

  try {
    const response = await fetch(url, { signal });
    console.log("Download complete", response);
    // process response further
  } catch (err) {
    console.error(`Download error: ${err.message}`);
  }
}

Если запрос прерывается после выполнения вызова fetch(), но до чтения тела ответа, то попытка прочитать тело ответа приведет к отклонению с исключением AbortError.

async function get() {
  const controller = new AbortController();
  const request = new Request("https://example.org/get", {
    signal: controller.signal,
  });

  const response = await fetch(request);
  controller.abort();
  // The next line will throw `AbortError`
  const text = await response.text();
  console.log(text);
}

Полный рабочий пример можно найти на GitHub; также вы можете посмотреть его в действии.

Спецификации

Спецификация
DOM
# interface-abortcontroller

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
AbortController 66 16 57 53 12.1
11.1Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
66 57 47 12.2
11.3Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
9.0 66
AbortController 66 16 57 53 12.1
11.1Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
66 57 47 12.2
11.3Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
9.0 66
abort 66 16 57 53 12.1
11.1Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
66 57 47 12.2
11.3Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
9.0 66
signal 66 16 57 53 12.1
11.1Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
66 57 47 12.2
11.3Несмотря на то, что window.AbortController определён, он не прерывает запросы fetch. См. ошибку 174980.
9.0 66

См. также

  • Fetch API
  • Abortable Fetch от Джейка Арчибальда

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AbortController

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API