@ydbjs/abortable
Version:
Utilities for working with AbortController and AbortSignal in YDB operations.
29 lines • 862 B
JavaScript
export function linkSignals(...signals) {
let ac = new AbortController();
let activeSignals = signals.filter((s) => !!s);
for (let signal of activeSignals) {
if (signal.aborted) {
ac.abort(signal.reason);
return {
signal: ac.signal,
[Symbol.dispose]: () => { },
};
}
}
let onAbort = (e) => ac.abort(e.target.reason);
for (let signal of activeSignals) {
signal.addEventListener('abort', onAbort, { once: true });
}
return {
signal: ac.signal,
[Symbol.dispose]() {
for (let signal of activeSignals) {
signal.removeEventListener('abort', onAbort);
}
if (!ac.signal.aborted) {
ac.abort();
}
},
};
}
//# sourceMappingURL=signals.js.map