This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2019.
Note: This feature is available in Web Workers.
The signal read-only property of the AbortController interface returns an AbortSignal object instance, which can be used to communicate with/abort an asynchronous operation as desired.
An AbortSignal object instance.
In the following snippet, we aim to download a video using the Fetch API.
We first create a controller using the AbortController() constructor, then grab a reference to its associated AbortSignal object using the AbortController.signal property.
When the fetch request is initiated, we pass in the AbortSignal as an option inside the request's options object (the {signal} below). This associates the signal and controller with the fetch request and allows us to abort it by calling AbortController.abort(), as seen below in the second event listener.
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}`);
});
}
Note: When abort() is called, the fetch() promise rejects with an AbortError.
You can find a full working example on GitHub; you can also see it running live.
| Specification |
|---|
| DOM> # ref-for-dom-abortcontroller-signal②> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
signal |
66 | 16 | 57 | 53 | 12.111.1–12.1Even thoughwindow.AbortController is defined, it doesn't really abort fetch requests. See bug 174980. |
66 | 57 | 47 | 12.211.3–12.2Even thoughwindow.AbortController is defined, it doesn't really abort fetch requests. See bug 174980. |
9.0 | 66 | 12.211.3–12.2Even thoughwindow.AbortController is defined, it doesn't really abort fetch requests. See bug 174980. |
© 2005–2025 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