withLatestFrom.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { __read, __spreadArray } from "tslib";
  2. import { operate } from '../util/lift';
  3. import { createOperatorSubscriber } from './OperatorSubscriber';
  4. import { innerFrom } from '../observable/innerFrom';
  5. import { identity } from '../util/identity';
  6. import { noop } from '../util/noop';
  7. import { popResultSelector } from '../util/args';
  8. export function withLatestFrom() {
  9. var inputs = [];
  10. for (var _i = 0; _i < arguments.length; _i++) {
  11. inputs[_i] = arguments[_i];
  12. }
  13. var project = popResultSelector(inputs);
  14. return operate(function (source, subscriber) {
  15. var len = inputs.length;
  16. var otherValues = new Array(len);
  17. var hasValue = inputs.map(function () { return false; });
  18. var ready = false;
  19. var _loop_1 = function (i) {
  20. innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, function (value) {
  21. otherValues[i] = value;
  22. if (!ready && !hasValue[i]) {
  23. hasValue[i] = true;
  24. (ready = hasValue.every(identity)) && (hasValue = null);
  25. }
  26. }, noop));
  27. };
  28. for (var i = 0; i < len; i++) {
  29. _loop_1(i);
  30. }
  31. source.subscribe(createOperatorSubscriber(subscriber, function (value) {
  32. if (ready) {
  33. var values = __spreadArray([value], __read(otherValues));
  34. subscriber.next(project ? project.apply(void 0, __spreadArray([], __read(values))) : values);
  35. }
  36. }));
  37. });
  38. }
  39. //# sourceMappingURL=withLatestFrom.js.map