UNPKG

@reactivex/ix-es5-esm

Version:

The Interactive Extensions for JavaScript

80 lines (78 loc) 3.74 kB
import { __asyncGenerator, __await, __extends, __generator } from "tslib"; import { AsyncIterableX } from './asynciterablex.js'; import { identity } from '../util/identity.js'; import { wrapWithAbort } from './operators/withabort.js'; import { throwIfAborted } from '../aborterror.js'; import { safeRace } from '../util/safeRace.js'; // eslint-disable-next-line @typescript-eslint/no-empty-function var NEVER_PROMISE = new Promise(function () { }); function wrapPromiseWithIndex(promise, index) { return promise.then(function (value) { return ({ value: value, index: index }); }); } /** @ignore */ var CombineLatestAsyncIterable = /** @class */ (function (_super) { __extends(CombineLatestAsyncIterable, _super); function CombineLatestAsyncIterable(sources) { var _this = _super.call(this) || this; _this._sources = sources; return _this; } CombineLatestAsyncIterable.prototype[Symbol.asyncIterator] = function (signal) { return __asyncGenerator(this, arguments, function _a() { var length, iterators, nexts, hasValueAll, values, hasValues, active, i, iterator, next, _b, _c, value$, done$, index, iterator$; return __generator(this, function (_d) { switch (_d.label) { case 0: throwIfAborted(signal); length = this._sources.length; iterators = new Array(length); nexts = new Array(length); hasValueAll = false; values = new Array(length); hasValues = new Array(length); active = length; hasValues.fill(false); for (i = 0; i < length; i++) { iterator = wrapWithAbort(this._sources[i], signal)[Symbol.asyncIterator](); iterators[i] = iterator; nexts[i] = wrapPromiseWithIndex(iterator.next(), i); } _d.label = 1; case 1: if (!(active > 0)) return [3 /*break*/, 7]; next = safeRace(nexts); return [4 /*yield*/, __await(next)]; case 2: _b = _d.sent(), _c = _b.value, value$ = _c.value, done$ = _c.done, index = _b.index; if (!done$) return [3 /*break*/, 3]; nexts[index] = NEVER_PROMISE; active--; return [3 /*break*/, 6]; case 3: values[index] = value$; hasValues[index] = true; iterator$ = iterators[index]; nexts[index] = wrapPromiseWithIndex(iterator$.next(), index); if (!(hasValueAll || (hasValueAll = hasValues.every(identity)))) return [3 /*break*/, 6]; return [4 /*yield*/, __await(values)]; case 4: return [4 /*yield*/, _d.sent()]; case 5: _d.sent(); _d.label = 6; case 6: return [3 /*break*/, 1]; case 7: return [2 /*return*/]; } }); }); }; return CombineLatestAsyncIterable; }(AsyncIterableX)); export { CombineLatestAsyncIterable }; export function combineLatest() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } return new CombineLatestAsyncIterable(sources); } //# sourceMappingURL=combinelatest.js.map