@lifaon/rx-js-light
Version:
Blazing fast Observables
35 lines (34 loc) • 854 B
JavaScript
import {single} from "../../values/single/single.mjs";
export function combineLatest(observables) {
const length = observables.length;
if (length === 0) {
return single([]);
} else {
return emit => {
const values = Array.from({
length
});
const received = Array.from({
length
});
let receivedCount = 0;
const unsubscribe = observables.map((subscribe, index) => {
return subscribe(value => {
values[index] = value;
if (!received[index]) {
received[index] = true;
receivedCount++;
}
if (receivedCount === length) {
emit(values);
}
});
});
return () => {
for (let i = 0, l = unsubscribe.length; i < l; i++) {
unsubscribe[i]();
}
};
};
}
}