zip.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { __read, __spreadArray } from "tslib";
  2. import { Observable } from '../Observable';
  3. import { innerFrom } from './innerFrom';
  4. import { argsOrArgArray } from '../util/argsOrArgArray';
  5. import { EMPTY } from './empty';
  6. import { createOperatorSubscriber } from '../operators/OperatorSubscriber';
  7. import { popResultSelector } from '../util/args';
  8. export function zip() {
  9. var args = [];
  10. for (var _i = 0; _i < arguments.length; _i++) {
  11. args[_i] = arguments[_i];
  12. }
  13. var resultSelector = popResultSelector(args);
  14. var sources = argsOrArgArray(args);
  15. return sources.length
  16. ? new Observable(function (subscriber) {
  17. var buffers = sources.map(function () { return []; });
  18. var completed = sources.map(function () { return false; });
  19. subscriber.add(function () {
  20. buffers = completed = null;
  21. });
  22. var _loop_1 = function (sourceIndex) {
  23. innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, function (value) {
  24. buffers[sourceIndex].push(value);
  25. if (buffers.every(function (buffer) { return buffer.length; })) {
  26. var result = buffers.map(function (buffer) { return buffer.shift(); });
  27. subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray([], __read(result))) : result);
  28. if (buffers.some(function (buffer, i) { return !buffer.length && completed[i]; })) {
  29. subscriber.complete();
  30. }
  31. }
  32. }, function () {
  33. completed[sourceIndex] = true;
  34. !buffers[sourceIndex].length && subscriber.complete();
  35. }));
  36. };
  37. for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {
  38. _loop_1(sourceIndex);
  39. }
  40. return function () {
  41. buffers = completed = null;
  42. };
  43. })
  44. : EMPTY;
  45. }
  46. //# sourceMappingURL=zip.js.map