AbortSignal: timeout() static method
Note: This feature is available in Web Workers.
The AbortSignal.timeout()
static method returns an AbortSignal
that will automatically abort after a specified time.
The signal aborts with a TimeoutError
DOMException
on timeout, or with AbortError
DOMException
due to pressing a browser stop button (or some other inbuilt "stop" operation).
This allows UIs to differentiate timeout errors, which typically require user notification, from user-triggered aborts that do not.
The timeout is based on active rather than elapsed time, and will effectively be paused if the code is running in a suspended worker, or while the document is in a back-forward cache ("bfcache").
To combine multiple signals, you can use AbortSignal.any()
, for example, to directly abort a download using either a timeout signal or by calling AbortController.abort()
.
Syntax
AbortSignal.timeout(time)
Parameters
time
-
The "active" time in milliseconds before the returned
AbortSignal
will abort. The value must be within range of 0 andNumber.MAX_SAFE_INTEGER
.
Return value
An AbortSignal
.
The signal will abort with its AbortSignal.reason
property set to a TimeoutError
DOMException
on timeout, or an AbortError
DOMException
if the operation was user-triggered.
Examples
Below is a simple example showing a fetch operation that will timeout if unsuccessful after 5 seconds. Note that this may also fail if the method is not supported, if a browser "stop" button is pressed, or for another reason.
const url = "https://path_to_large_file.mp4";
try {
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
const result = await res.blob();
// …
} catch (err) {
if (err.name === "TimeoutError") {
console.error("Timeout: It took more than 5 seconds to get the result!");
} else if (err.name === "AbortError") {
console.error(
"Fetch aborted by user action (browser stop button, closing tab, etc.",
);
} else if (err.name === "TypeError") {
console.error("AbortSignal.timeout() method is not supported");
} else {
// A network error, or some other problem.
console.error(`Error: type: ${err.name}, message: ${err.message}`);
}
}
Specifications
Specification |
---|
DOM Standard # ref-for-dom-abortsignal-timeout① |
Browser compatibility
BCD tables only load in the browser