Это экспериментальная технология
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.
AbortSignal
интерфейс представляет собой объект сигнала, который позволяет вам общаться с DOM запросом (например, Fetch) и прервать его при необходимости с помощью объекта AbortController
.
Свойства
AbortSignal также наследует свойства от своего родительского интерфейса, EventTarget
.
AbortSignal.aborted
Только для чтения- Это
Boolean
, который указывает, отменен ли запрос(ы), с которым связывался сигнал, отменён (true
) или нет (false
).
Обработчики событий
AbortSignal.onabort
- Вызывается когда происходит событие
abort
, т.е. когда DOM запрос(ы), с которым связывался сигнал, отменён.
Методы
AbortSignal наследует методы от родительского интерфейса, EventTarget
.
Примеры
В следующем фрагменте мы будем загружать видео используя Fetch API.
Сначала мы создаём контроллер с помощью контруктора AbortController()
, а затем получаем ссылку на связанный объект AbortSignal
используя свойство AbortController.signal
.
Когда fetch запрос инициируется, мы передаём AbortSignal
в качестве опции внутрь объекта параметров запроса (см. {signal}
ниже). Это связывает сигнал и контроллер с fetch запросом и позволяет нам прервать его, вызвав AbortController.abort()
, как показано ниже во втором прослушивателе событий.
var controller = new AbortController(); var signal = controller.signal; var downloadBtn = document.querySelector('.download'); var abortBtn = document.querySelector('.abort'); downloadBtn.addEventListener('click', fetchVideo); abortBtn.addEventListener('click', function() { controller.abort(); console.log('Загрузка прервана'); }); function fetchVideo() { ... fetch(url, {signal}).then(function(response) { ... }).catch(function(e) { reports.textContent = 'Ошибка загрузки: ' + e.message; }) }
Примечание: Когда abort()
вызывается, fetch()
обещаение отклоняется с AbortError
.
Текущая версия Firefox отклоняет обещание с DOMException
Вы можете найти полный рабочий пример на GitHub — см. abort-api (см. как он работает в живую).
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
DOM Определение 'AbortSignal' в этой спецификации. |
Живой стандарт | Initial definition |
Совместимость с браузерами
Компьютеры | Мобильные | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
AbortSignal | Chrome Полная поддержка 66 | Edge Полная поддержка 16 | Firefox Полная поддержка 57 | IE Нет поддержки Нет | Opera Полная поддержка 53 | Safari Полная поддержка 11.1 | WebView Android Полная поддержка 66 | Chrome Android Полная поддержка 66 | Firefox Android Полная поддержка 57 | Opera Android Полная поддержка 47 | Safari iOS Полная поддержка 11.3 | Samsung Internet Android Нет поддержки Нет |
abort event | Chrome Полная поддержка 66 | Edge Полная поддержка 16 | Firefox Полная поддержка 57 | IE Нет поддержки Нет | Opera Полная поддержка 53 | Safari Полная поддержка 11.1 | WebView Android Полная поддержка 66 | Chrome Android Полная поддержка 66 | Firefox Android Полная поддержка 57 | Opera Android Полная поддержка 47 | Safari iOS Полная поддержка 11.3 | Samsung Internet Android Нет поддержки Нет |
aborted | Chrome Полная поддержка 66 | Edge Полная поддержка 16 | Firefox Полная поддержка 57 | IE Нет поддержки Нет | Opera Полная поддержка 53 | Safari Полная поддержка 11.1 | WebView Android Полная поддержка 66 | Chrome Android Полная поддержка 66 | Firefox Android Полная поддержка 57 | Opera Android Полная поддержка 47 | Safari iOS Полная поддержка 11.3 | Samsung Internet Android Нет поддержки Нет |
onabort | Chrome Полная поддержка 66 | Edge Полная поддержка 16 | Firefox Полная поддержка 57 | IE Нет поддержки Нет | Opera Полная поддержка 53 | Safari Полная поддержка 11.1 | WebView Android Полная поддержка 66 | Chrome Android Полная поддержка 66 | Firefox Android Полная поддержка 57 | Opera Android Полная поддержка 47 | Safari iOS Полная поддержка 11.3 | Samsung Internet Android Нет поддержки Нет |
Легенда
- Полная поддержка
- Полная поддержка
- Нет поддержки
- Нет поддержки
- Экспериментальная. Ожидаемое поведение может измениться в будущем.
- Экспериментальная. Ожидаемое поведение может измениться в будущем.
Смотрите также
- Fetch API
- Abortable Fetch by Jake Archibald