UNPKG

abort-controller-multiplexer

Version:

Combine multiple AbortControllers or AbortSignals into a single instance

40 lines (39 loc) 1.22 kB
export function combineSignals(...signals) { let sharedOnAbort = null; return { get aborted() { return signals.some(signal => signal.aborted); }, get reason() { return signals.find(signal => !!signal.reason)?.reason; }, get onabort() { return sharedOnAbort; }, set onabort(onAbort) { sharedOnAbort = onAbort; for (const signal of signals) { signal.onabort = sharedOnAbort; } }, // Methods: addEventListener: (type, callback, options) => { for (const signal of signals) { signal.addEventListener(type, callback, options); } }, dispatchEvent: (event) => { return signals.some(signal => signal.dispatchEvent(event)); }, removeEventListener: (type, callback, options) => { for (const signal of signals) { signal.removeEventListener(type, callback, options); } }, throwIfAborted: () => { for (const signal of signals) { signal.throwIfAborted(); } } }; }