blob: 248c29a5776608ce128cd29b74bc69dcd1a54e86 [file] [log] [blame]
import { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';
export function catchError(selector) {
return function catchErrorOperatorFunction(source) {
const operator = new CatchOperator(selector);
const caught = source.lift(operator);
return (operator.caught = caught);
};
}
class CatchOperator {
constructor(selector) {
this.selector = selector;
}
call(subscriber, source) {
return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
}
}
class CatchSubscriber extends SimpleOuterSubscriber {
constructor(destination, selector, caught) {
super(destination);
this.selector = selector;
this.caught = caught;
}
error(err) {
if (!this.isStopped) {
let result;
try {
result = this.selector(err, this.caught);
}
catch (err2) {
super.error(err2);
return;
}
this._unsubscribeAndRecycle();
const innerSubscriber = new SimpleInnerSubscriber(this);
this.add(innerSubscriber);
const innerSubscription = innerSubscribe(result, innerSubscriber);
if (innerSubscription !== innerSubscriber) {
this.add(innerSubscription);
}
}
}
}
//# sourceMappingURL=catchError.js.map