UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

32 lines (31 loc) 837 B
import {isReferenceError} from "../errors/reference-error/is-reference-error.mjs"; import {noop} from "./noop.mjs"; export const DEFAULT_ON_ERROR_FOR_ASYNC_UNSUBSCRIBE = error => { throw error; }; export function asyncUnsubscribe(getUnsubscribe, onSuccess = noop, onError = DEFAULT_ON_ERROR_FOR_ASYNC_UNSUBSCRIBE) { let unsubscribe; try { unsubscribe = getUnsubscribe(); } catch (error) { if (isReferenceError(error)) { queueMicrotask(() => { try { getUnsubscribe()(); } catch (error) { onError(error); } }); } else { onError(error); } return; } unsubscribe(); onSuccess(); } export function asyncUnsubscribePromise(getUnsubscribe) { return new Promise((resolve, reject) => { asyncUnsubscribe(getUnsubscribe, resolve, reject); }); }