@lifaon/rx-js-light
Version:
Blazing fast Observables
38 lines (37 loc) • 1.02 kB
JavaScript
import {asyncUnsubscribe} from "../../../../../../misc/helpers/async-unsubscribe.mjs";
export function notificationsToValuesObservable(subscribe, onError, maxNumberOfValues = Number.POSITIVE_INFINITY) {
return emit => {
let running = true;
const clear = () => {
if (running) {
running = false;
asyncUnsubscribe(() => unsubscribe);
}
};
const values = [];
const unsubscribe = subscribe(notification => {
switch (notification.name) {
case 'next':
values.push(notification.value);
if (values.length > maxNumberOfValues) {
values.shift();
}
break;
case 'complete':
emit(values);
clear();
break;
case 'error':
if (onError !== void 0) {
onError(notification.value, values => {
if (running) {
emit(values);
}
});
}
break;
}
});
return clear;
};
}