@lifaon/rx-js-light
Version:
Blazing fast Observables
32 lines (31 loc) • 837 B
JavaScript
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);
});
}