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).

53 lines (52 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var subject_1 = require("./subject"); var toCallbacks_1 = require("./toCallbacks"); /** * Combines iterables * * @param sources the iterables to combine */ function combineLatest() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } var results = new Array(sources.length); var resultsAvailable = new Array(sources.length).fill(false); var subject = new subject_1.Subject(); var done = false; subject.finally(function () { done = true; }); var doneCount = 0; sources.map(function (source, index) { return toCallbacks_1.toCallbacks(function (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(function (value) { return 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;