UNPKG

axax

Version:

A library of async iterator extensions for JavaScript including ```map```, ```reduce```, ```filter```, ```flatMap```, ```pipe``` and [more](https://github.com/jamiemccrindle/axax/blob/master/docs/API.md#functions).

49 lines (48 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const subject_1 = require("./subject"); const toCallbacks_1 = require("./toCallbacks"); /** * Combines iterables * * @param sources the iterables to combine */ function combineLatest(...sources) { const results = new Array(sources.length); const resultsAvailable = new Array(sources.length).fill(false); const subject = new subject_1.Subject(); let done = false; subject.finally(() => { done = true; }); let doneCount = 0; sources.map((source, index) => { return toCallbacks_1.toCallbacks(result => { if (result.done) { doneCount += 1; if (doneCount >= sources.length) { done = true; return subject.callback({ done: true, value: [] }); } } if (done) { throw new toCallbacks_1.StopError(); } else if (!result.done) { results[index] = result.value; resultsAvailable[index] = true; if (resultsAvailable.every(value => value)) { return subject.callback({ done: false, value: Array.from(results) }); } else { return Promise.resolve(); } } else { return Promise.resolve(); } })(source); }); return subject.iterator; } exports.combineLatest = combineLatest;