π Prefer AbortSignal.any() over manually forwarding abort events between signals.
πΌπ« This rule is enabled in the β
recommended config. This rule is disabled in the βοΈ unopinionated config.
π‘ This rule is manually fixable by editor suggestions.
AbortSignal.any() creates an AbortSignal that aborts when any of the input signals abort. It avoids creating an extra AbortController and manually forwarding abort events from each input signal.
This rule only reports simple patterns where the controller is otherwise only used through .signal. Cases that inspect the composed signal's abort reason or alias the signal are ignored, as AbortSignal.any() preserves the reason from the first input signal to abort while manual bridging often does not.
// β
const abortController = new AbortController();
for (const signal of signals) {
signal.addEventListener('abort', () => abortController.abort());
}
await fetch(url, {signal: abortController.signal});// β
const abortSignal = AbortSignal.any(signals);
await fetch(url, {signal: abortSignal});// β
const abortController = new AbortController();
firstSignal.addEventListener('abort', () => abortController.abort());
secondSignal.addEventListener('abort', () => abortController.abort());
await fetch(url, {signal: abortController.signal});// β
const abortSignal = AbortSignal.any([firstSignal, secondSignal]);
await fetch(url, {signal: abortSignal});Controllers with other behavior are intentionally ignored.
// β
const abortController = new AbortController();
signal.addEventListener('abort', () => abortController.abort());
button.addEventListener('click', () => abortController.abort());
await fetch(url, {signal: abortController.signal});