@lifaon/rx-js-light
Version:
Blazing fast Observables
28 lines (27 loc) • 654 B
JavaScript
export function sourceObservablePipe(getSource) {
return subscribe => {
let unsubscribe;
let observersCounts = 0;
const source = getSource();
return emit => {
let running = true;
observersCounts++;
const unsubscribeSource = source.subscribe(emit);
if (observersCounts === 1) {
unsubscribe = subscribe(value => {
source.emit(value);
});
}
return () => {
if (running) {
running = false;
unsubscribeSource();
observersCounts--;
if (observersCounts === 0) {
unsubscribe();
}
}
};
};
};
}