| import { innerFrom } from '../observable/innerFrom'; |
| import { Subject } from '../Subject'; |
| import { operate } from '../util/lift'; |
| import { createOperatorSubscriber } from './OperatorSubscriber'; |
| export function repeatWhen(notifier) { |
| return operate(function (source, subscriber) { |
| var innerSub; |
| var syncResub = false; |
| var completions$; |
| var isNotifierComplete = false; |
| var isMainComplete = false; |
| var checkComplete = function () { return isMainComplete && isNotifierComplete && (subscriber.complete(), true); }; |
| var getCompletionSubject = function () { |
| if (!completions$) { |
| completions$ = new Subject(); |
| innerFrom(notifier(completions$)).subscribe(createOperatorSubscriber(subscriber, function () { |
| if (innerSub) { |
| subscribeForRepeatWhen(); |
| } |
| else { |
| syncResub = true; |
| } |
| }, function () { |
| isNotifierComplete = true; |
| checkComplete(); |
| })); |
| } |
| return completions$; |
| }; |
| var subscribeForRepeatWhen = function () { |
| isMainComplete = false; |
| innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, function () { |
| isMainComplete = true; |
| !checkComplete() && getCompletionSubject().next(); |
| })); |
| if (syncResub) { |
| innerSub.unsubscribe(); |
| innerSub = null; |
| syncResub = false; |
| subscribeForRepeatWhen(); |
| } |
| }; |
| subscribeForRepeatWhen(); |
| }); |
| } |
| //# sourceMappingURL=repeatWhen.js.map |