DOM Abort

AbortController and AbortSignal cancellation APIs.

AbortController and AbortSignal are globals used by Fetch, timers, streams, and event listeners.

const controller = new AbortController();
controller.signal.aborted; // false

controller.abort();
controller.signal.aborted; // true
controller.signal.reason.name; // "AbortError"

AbortController

  • controller.signal returns the same signal on every read.
  • abort(reason?) is idempotent and dispatches abort once.
  • Without a reason, the signal stores an AbortError DOMException.

AbortSignal

MemberPurpose
abortedWhether cancellation occurred.
reasonThe supplied reason or a default AbortError.
throwIfAborted()Throw the reason when aborted.
onabortSingle abort-event handler.
AbortSignal.abort(reason?)Create an already-aborted signal.
AbortSignal.any(signals)Abort when any input aborts.
AbortSignal.timeout(ms)Abort later with TimeoutError.

AbortSignal is not directly constructible.

Event listeners

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

An already-aborted signal prevents registration. A non-AbortSignal value in the signal option is ignored.