summaryrefslogtreecommitdiff
path: root/source/helpers/abort-controller.ts
blob: afc1f406232dbd1fae1f0e5b2080092777476988 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export function callHandle(handle: Deinit): void {
	if ('disconnect' in handle) { // Browser observers
		handle.disconnect();
	} else if ('abort' in handle) {
		handle.abort();
	} else if (typeof handle === 'function') {
		handle();
	}
}

export default function onAbort(abort: AbortController | AbortSignal, ...callbacks: Deinit[]): void {
	const signal = abort instanceof AbortController ? abort.signal : abort;
	signal.addEventListener('abort', () => {
		for (const callback of callbacks) {
			callHandle(callback);
		}
	});
}