UNPKG

abort-utils

Version:

Utility functions to use and combine `AbortSignal` and `AbortController` with Promises

29 lines (28 loc) 991 B
/* eslint-disable @typescript-eslint/prefer-promise-reject-errors, promise/prefer-catch, promise/prefer-await-to-then */ async function promiseRaceWithSignal(promise, signal, { abortRejects = true } = {}) { if (!signal) { return promise; } const trueSignal = signal instanceof AbortController ? signal.signal : signal; if (abortRejects) { trueSignal.throwIfAborted(); } else if (trueSignal.aborted) { return trueSignal.reason; } return new Promise((resolve, reject) => { const handleAbort = () => { if (abortRejects) { reject(trueSignal.reason); } else { resolve(trueSignal.reason); } }; trueSignal.addEventListener('abort', handleAbort, { once: true }); promise.then(resolve, reject).finally(() => { trueSignal.removeEventListener('abort', handleAbort); }); }); } export { promiseRaceWithSignal };