UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

31 lines (30 loc) 1.02 kB
import {isAbortSignal} from "../is/is-abort-signal.mjs"; import {createEventListener} from "../../event-listener/__old/create-event-listener.mjs"; export function createAbortControllerFromAbortSignals(signals) { const abortController = new AbortController(); for (let i = 0, l = signals.length; i < l; i++) { const signal = signals[i]; if (isAbortSignal(signal)) { if (signal.aborted) { abortController.abort(); return abortController; } } else { throw new TypeError(`Expected AbortSignal at index #${i}`); } } const clear = () => { for (let i = 0, l = unsubscribeSignalList.length; i < l; i++) { unsubscribeSignalList[i](); } unsubscribeOwnSignal(); }; const unsubscribeOwnSignal = createEventListener(abortController.signal, 'abort', clear); const unsubscribeSignalList = signals.map(signal => { return createEventListener(signal, 'abort', () => { clear(); abortController.abort(); }); }); return abortController; }