UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

47 lines (46 loc) 1.82 kB
import {createEventListener} from "../../event-listener/__old/create-event-listener.mjs"; import {toTypedEventTarget} from "../../event-listener/__old/to-typed-event-target.mjs"; import {createAbortError} from "../../errors/abort-error/create-abort-error.mjs"; import {DEFAULT_ABORTED_PROMISE_FACTORY} from "../default-aborted-promise-factory.constant.mjs"; export function awaitPromiseFactoryWithAbortSignal(promiseFactory, signal, onFulfilled, onRejected, onAborted) { if (signal.aborted) { onAborted(); } else { let running = true; const end = () => { running = false; removeAbortEventListener(); }; const removeAbortEventListener = createEventListener(toTypedEventTarget(signal), 'abort', () => { end(); onAborted(); }); promiseFactory(signal).then(value => { if (running) { end(); onFulfilled(value); } }, error => { if (running) { end(); onRejected(error); } }); } } export function awaitPromiseWithAbortSignal(promise, signal, onFulfilled, onRejected, onAborted) { return awaitPromiseFactoryWithAbortSignal(() => promise, signal, onFulfilled, onRejected, onAborted); } export function abortSignalPromiseBranching(signal, promiseFactoryNotAborted, promiseFactoryAborted = DEFAULT_ABORTED_PROMISE_FACTORY) { return signal.aborted ? promiseFactoryAborted(signal) : promiseFactoryNotAborted(signal); } export function wrapPromiseFactoryWithAbortSignal(promiseFactory, signal) { return new Promise((resolve, reject) => { awaitPromiseFactoryWithAbortSignal(promiseFactory, signal, resolve, reject, () => reject(createAbortError({ signal }))); }); } export function wrapPromiseWithAbortSignal(promise, signal) { return wrapPromiseFactoryWithAbortSignal(() => promise, signal); }