@lifaon/rx-js-light
Version:
Blazing fast Observables
40 lines (39 loc) • 1.38 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";
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);
});
}