repeatWhen.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.repeatWhen = void 0;
  4. var innerFrom_1 = require("../observable/innerFrom");
  5. var Subject_1 = require("../Subject");
  6. var lift_1 = require("../util/lift");
  7. var OperatorSubscriber_1 = require("./OperatorSubscriber");
  8. function repeatWhen(notifier) {
  9. return lift_1.operate(function (source, subscriber) {
  10. var innerSub;
  11. var syncResub = false;
  12. var completions$;
  13. var isNotifierComplete = false;
  14. var isMainComplete = false;
  15. var checkComplete = function () { return isMainComplete && isNotifierComplete && (subscriber.complete(), true); };
  16. var getCompletionSubject = function () {
  17. if (!completions$) {
  18. completions$ = new Subject_1.Subject();
  19. innerFrom_1.innerFrom(notifier(completions$)).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function () {
  20. if (innerSub) {
  21. subscribeForRepeatWhen();
  22. }
  23. else {
  24. syncResub = true;
  25. }
  26. }, function () {
  27. isNotifierComplete = true;
  28. checkComplete();
  29. }));
  30. }
  31. return completions$;
  32. };
  33. var subscribeForRepeatWhen = function () {
  34. isMainComplete = false;
  35. innerSub = source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, undefined, function () {
  36. isMainComplete = true;
  37. !checkComplete() && getCompletionSubject().next();
  38. }));
  39. if (syncResub) {
  40. innerSub.unsubscribe();
  41. innerSub = null;
  42. syncResub = false;
  43. subscribeForRepeatWhen();
  44. }
  45. };
  46. subscribeForRepeatWhen();
  47. });
  48. }
  49. exports.repeatWhen = repeatWhen;
  50. //# sourceMappingURL=repeatWhen.js.map