Перейти к содержимому

DOM Abort

API отмены AbortController и AbortSignal.

На этой странице

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.abort(reason?)Создать уже прерванный сигнал.
AbortSignal.any(signals)Прервать, когда прерывается любой из входных сигналов.
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

ExportKindStatusNotes
AbortControllerclassFullsignal, abort()
AbortSignalclassFullAbortSignal.abort(), AbortSignal.timeout(), AbortSignal.any(), aborted, reason, throwIfAborted(), onabort

Была ли эта страница полезной?