@lifaon/rx-js-light
Version:
Blazing fast Observables
30 lines (29 loc) • 669 B
JavaScript
export function conditionalObservable(subscribe, condition) {
return emit => {
let running = true;
let unsubscribe = null;
let lastValue;
const _unsubscribe = () => {
if (unsubscribe !== null) {
unsubscribe();
unsubscribe = null;
}
};
const unsubscribeOfCondition = condition(value => {
if (value !== lastValue) {
lastValue = value;
_unsubscribe();
if (value && running) {
unsubscribe = subscribe(emit);
}
}
});
return () => {
if (running) {
running = false;
unsubscribeOfCondition();
_unsubscribe();
}
};
};
}