UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

42 lines (41 loc) 1.68 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"; import {notificationsToValuesObservable} from "../../../../../pipes/built-in/with-notifications/others/notifications-to-values/notifications-to-values-observable.mjs"; export function toPromiseAll(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 = values => { end(); resolve(values); }; const _reject = error => { end(); reject(error); }; const _subscribe = notificationsToValuesObservable(subscribe, _reject, options?.maxNumberOfValues); const unsubscribe = _subscribe(_resolve); }); }