UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

40 lines (39 loc) 1.38 kB
import {isAbortSignal} from "../../../../../misc/abortable/is/is-abort-signal.mjs"; import {createAbortError} from "../../../../../misc/errors/abort-error/create-abort-error.mjs"; import {createEventListener} from "../../../../../misc/event-listener/functions/create-event-listener.mjs"; import {toTypedEventTarget} from "../../../../../misc/event-listener/functions/to-typed-event-target.mjs"; import {asyncUnsubscribe} from "../../../../../misc/helpers/async-unsubscribe.mjs"; export function toPromise(subscribe, options) { return new Promise((resolve, reject) => { let removeAbortEventListener; if (options !== void 0 && isAbortSignal(options.signal)) { const signal = options.signal; if (signal.aborted) { return reject(createAbortError({ signal })); } else { removeAbortEventListener = createEventListener(toTypedEventTarget(signal), 'abort', () => { _reject(createAbortError({ signal })); }); } } const end = () => { if (removeAbortEventListener !== void 0) { removeAbortEventListener(); } asyncUnsubscribe(() => unsubscribe); }; const _resolve = value => { end(); resolve(value); }; const _reject = error => { end(); reject(error); }; const unsubscribe = subscribe(_resolve); }); }