1 import { Subject } from '../Subject';
2 import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
3 export function retryWhen(notifier) {
4 return (source) => source.lift(new RetryWhenOperator(notifier, source));
6 class RetryWhenOperator {
7 constructor(notifier, source) {
8 this.notifier = notifier;
11 call(subscriber, source) {
12 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
15 class RetryWhenSubscriber extends SimpleOuterSubscriber {
16 constructor(destination, notifier, source) {
18 this.notifier = notifier;
22 if (!this.isStopped) {
23 let errors = this.errors;
24 let retries = this.retries;
25 let retriesSubscription = this.retriesSubscription;
27 errors = new Subject();
29 const { notifier } = this;
30 retries = notifier(errors);
33 return super.error(e);
35 retriesSubscription = innerSubscribe(retries, new SimpleInnerSubscriber(this));
38 this.errors = undefined;
39 this.retriesSubscription = undefined;
41 this._unsubscribeAndRecycle();
43 this.retries = retries;
44 this.retriesSubscription = retriesSubscription;
49 const { errors, retriesSubscription } = this;
52 this.errors = undefined;
54 if (retriesSubscription) {
55 retriesSubscription.unsubscribe();
56 this.retriesSubscription = undefined;
58 this.retries = undefined;
61 const { _unsubscribe } = this;
62 this._unsubscribe = null;
63 this._unsubscribeAndRecycle();
64 this._unsubscribe = _unsubscribe;
65 this.source.subscribe(this);
68 //# sourceMappingURL=retryWhen.js.map