@lifaon/rx-js-light
Version:
Blazing fast Observables
31 lines (30 loc) • 1.02 kB
JavaScript
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;
}