AbortController: свойство signal
Базовая версия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с марта 2019 года.
Примечание: Эта функция доступна в рабочих потоках.
Чтение только свойство signal интерфейса AbortController возвращает экземпляр объекта AbortSignal, который может быть использован для взаимодействия с асинхронной операцией и ее прерывания по мере необходимости.
Значение
Экземпляр объекта AbortSignal.
Примеры
В следующем фрагменте кода мы пытаемся загрузить видео с помощью API Fetch.
Сначала мы создаем контроллер с помощью конструктора AbortController(), затем получаем ссылку на связанный объект AbortSignal с помощью свойства AbortController.signal.
Когда инициируется запрос fetch, мы передаем AbortSignal в качестве параметра в объект опций запроса (ниже {signal}). Это связывает сигнал и контроллер с запросом fetch и позволяет прервать его, вызвав AbortController.abort(), как показано ниже во втором обработчике события.
const controller = new AbortController();
const signal = controller.signal;
const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");
downloadBtn.addEventListener("click", fetchVideo);
abortBtn.addEventListener("click", () => {
controller.abort();
console.log("Download aborted");
});
function fetchVideo() {
fetch(url, { signal })
.then((response) => {
console.log("Download complete", response);
})
.catch((err) => {
console.error(`Download error: ${err.message}`);
});
}
Примечание: Когда вызывается abort(), promise fetch() отклоняется с ошибкой AbortError.
Вы можете найти полный работающий пример на GitHub; вы также можете посмотреть его в действии.
Спецификации
| Спецификация |
|---|
| DOM # ref-for-dom-abortcontroller-signal② |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
signal |
66 | 16 | 57 | 53 | 12.111.1Несмотря на то, чтоwindow.AbortController определена, она не прерывает запросы fetch. См. ошибку 174980. |
66 | 57 | 47 | 12.211.3Несмотря на то, чтоwindow.AbortController определена, она не прерывает запросы fetch. См. ошибку 174980. |
9.0 | 66 |
См. также
© 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/signal