@lifaon/rx-js-light
Version:
Blazing fast Observables
23 lines (22 loc) • 758 B
JavaScript
export function mergeAllObservable(subscribe, maxNumberOfSubscriptions = Number.POSITIVE_INFINITY) {
maxNumberOfSubscriptions = Math.max(0, maxNumberOfSubscriptions);
return emit => {
let running = true;
const childrenUnsubscribeFunctions = [];
const unsubscribe = subscribe(childSubscribe => {
childrenUnsubscribeFunctions.push(childSubscribe(emit));
if (childrenUnsubscribeFunctions.length > maxNumberOfSubscriptions) {
childrenUnsubscribeFunctions.shift()();
}
});
return () => {
if (running) {
running = false;
unsubscribe();
for (let i = 0, l = childrenUnsubscribeFunctions.length; i < l; i++) {
childrenUnsubscribeFunctions[i]();
}
}
};
};
}