@lifaon/rx-js-light
Version:
Blazing fast Observables
42 lines (41 loc) • 1.68 kB
JavaScript
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);
});
}