forkJoin.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.forkJoin = void 0;
  4. var Observable_1 = require("../Observable");
  5. var argsArgArrayOrObject_1 = require("../util/argsArgArrayOrObject");
  6. var innerFrom_1 = require("./innerFrom");
  7. var args_1 = require("../util/args");
  8. var OperatorSubscriber_1 = require("../operators/OperatorSubscriber");
  9. var mapOneOrManyArgs_1 = require("../util/mapOneOrManyArgs");
  10. var createObject_1 = require("../util/createObject");
  11. function forkJoin() {
  12. var args = [];
  13. for (var _i = 0; _i < arguments.length; _i++) {
  14. args[_i] = arguments[_i];
  15. }
  16. var resultSelector = args_1.popResultSelector(args);
  17. var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys;
  18. var result = new Observable_1.Observable(function (subscriber) {
  19. var length = sources.length;
  20. if (!length) {
  21. subscriber.complete();
  22. return;
  23. }
  24. var values = new Array(length);
  25. var remainingCompletions = length;
  26. var remainingEmissions = length;
  27. var _loop_1 = function (sourceIndex) {
  28. var hasValue = false;
  29. innerFrom_1.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {
  30. if (!hasValue) {
  31. hasValue = true;
  32. remainingEmissions--;
  33. }
  34. values[sourceIndex] = value;
  35. }, function () { return remainingCompletions--; }, undefined, function () {
  36. if (!remainingCompletions || !hasValue) {
  37. if (!remainingEmissions) {
  38. subscriber.next(keys ? createObject_1.createObject(keys, values) : values);
  39. }
  40. subscriber.complete();
  41. }
  42. }));
  43. };
  44. for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {
  45. _loop_1(sourceIndex);
  46. }
  47. });
  48. return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;
  49. }
  50. exports.forkJoin = forkJoin;
  51. //# sourceMappingURL=forkJoin.js.map