Create an AbortController
which aborts after a set number of milliseconds (a deadline)
Works with browsers, NodeJS (16+), and spec-compliant polyfills.
Usage
Basic
import { createDeadline } from "abortcontroller-deadline";
const controller = createDeadline(500);
try {
const response = await fetch("https://example.com", {
signal: controller.signal,
});
const data = await response.json();
} catch (error) {
if (error instanceof fetch.AbortError) {
console.log("Deadline exceeded");
}
}
Connecting existing signals
You can chain the output of other AbortSignals into the deadline: if any of the signals aborts before the deadline, the deadline controller will be aborted too:
const parentController = new AbortController();
const anotherController = new AbortController();
const deadlineController = createDeadline(
500,
parentController.signal,
anotherController.signal
);
Cleaning up timeouts / deadlines
Internally, the deadline is triggered by a timeout (from setTimeout()
). While not required, it is a good practice to clean up any unused timeouts.
createDeadline()
manages this by adding a clearDeadline()
to any returned controller:
import { createDeadline } from "abortcontroller-deadline";
const controller = createDeadline(500);
try {
const response = await fetch("https://example.com", {
signal: controller.signal,
});
} catch (error) {
} finally {
controller.clearDeadline();
}