UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

35 lines (34 loc) 854 B
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](); } }; }; } }