AbortController и AbortSignal — глобальные объекты, используемые Fetch, таймерами,
потоками и слушателями событий.
const controller = new AbortController();
controller.signal.aborted; // false
controller.abort();
controller.signal.aborted; // true
controller.signal.reason.name; // "AbortError"AbortController
controller.signalпри каждом чтении возвращает один и тот же сигнал.abort(reason?)идемпотентен и отправляетabortодин раз.- Без причины сигнал сохраняет
DOMExceptionтипаAbortError.
AbortSignal
| Элемент | Назначение |
|---|---|
aborted | Произошла ли отмена. |
reason | Переданная причина или AbortError по умолчанию. |
throwIfAborted() | Выбросить причину, если сигнал прерван. |
onabort | Единственный обработчик события abort. |
AbortSignal. | Создать уже прерванный сигнал. |
AbortSignal. | Прервать, когда прерывается любой из входных сигналов. |
AbortSignal.timeout(ms) | Прервать позже с TimeoutError. |
AbortSignal нельзя создать напрямую через конструктор.
Слушатели событий
const target = new EventTarget();
const controller = new AbortController();
let calls = 0;
const onMessage = () => {
calls += 1;
};
target.addEventListener("message", onMessage, {
signal: controller.signal,
});
target.dispatchEvent(new Event("message"));
controller.abort(); // removes the listener
target.dispatchEvent(new Event("message"));
console.log(calls); // 1Уже прерванный сигнал предотвращает регистрацию. Значение, не являющееся AbortSignal, в
параметре signal игнорируется.
Reference
Status: Full · Not measured · since 1.1.0
Exports
| Export | Kind | Status | Notes |
|---|---|---|---|
AbortController | class | Full | signal, abort() |
AbortSignal | class | Full | AbortSignal.abort(), AbortSignal.timeout(), AbortSignal.any(), aborted, reason, throwIfAborted(), onabort |