blob: e3036c2b9929f1fdb7257d7eae2989246807aa62 [file] [log] [blame]
import { Subscriber } from '../Subscriber';
export function retry(count = -1) {
return (source) => source.lift(new RetryOperator(count, source));
}
class RetryOperator {
constructor(count, source) {
this.count = count;
this.source = source;
}
call(subscriber, source) {
return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
}
}
class RetrySubscriber extends Subscriber {
constructor(destination, count, source) {
super(destination);
this.count = count;
this.source = source;
}
error(err) {
if (!this.isStopped) {
const { source, count } = this;
if (count === 0) {
return super.error(err);
}
else if (count > -1) {
this.count = count - 1;
}
source.subscribe(this._unsubscribeAndRecycle());
}
}
}
//# sourceMappingURL=retry.js.map