import { innerFrom } from '../observable/innerFrom'; import { Subject } from '../Subject'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; export function retryWhen(notifier) { return operate((source, subscriber) => { let innerSub; let syncResub = false; let errors$; const subscribeForRetryWhen = () => { innerSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, undefined, (err) => { if (!errors$) { errors$ = new Subject(); innerFrom(notifier(errors$)).subscribe(createOperatorSubscriber(subscriber, () => innerSub ? subscribeForRetryWhen() : (syncResub = true))); } if (errors$) { errors$.next(err); } })); if (syncResub) { innerSub.unsubscribe(); innerSub = null; syncResub = false; subscribeForRetryWhen(); } }; subscribeForRetryWhen(); }); } //# sourceMappingURL=retryWhen.js.map