39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
import { __read, __spreadArray } from "tslib";
|
|
import { operate } from '../util/lift';
|
|
import { createOperatorSubscriber } from './OperatorSubscriber';
|
|
import { innerFrom } from '../observable/innerFrom';
|
|
import { identity } from '../util/identity';
|
|
import { noop } from '../util/noop';
|
|
import { popResultSelector } from '../util/args';
|
|
export function withLatestFrom() {
|
|
var inputs = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
inputs[_i] = arguments[_i];
|
|
}
|
|
var project = popResultSelector(inputs);
|
|
return operate(function (source, subscriber) {
|
|
var len = inputs.length;
|
|
var otherValues = new Array(len);
|
|
var hasValue = inputs.map(function () { return false; });
|
|
var ready = false;
|
|
var _loop_1 = function (i) {
|
|
innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, function (value) {
|
|
otherValues[i] = value;
|
|
if (!ready && !hasValue[i]) {
|
|
hasValue[i] = true;
|
|
(ready = hasValue.every(identity)) && (hasValue = null);
|
|
}
|
|
}, noop));
|
|
};
|
|
for (var i = 0; i < len; i++) {
|
|
_loop_1(i);
|
|
}
|
|
source.subscribe(createOperatorSubscriber(subscriber, function (value) {
|
|
if (ready) {
|
|
var values = __spreadArray([value], __read(otherValues));
|
|
subscriber.next(project ? project.apply(void 0, __spreadArray([], __read(values))) : values);
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
//# sourceMappingURL=withLatestFrom.js.map
|