我试图按顺序运行2个可观察对象,虽然,如果第一个给出特定的错误,我想停止concat并执行另一件事。
尽管,第一个可观察对象可能会给出许多异常,我只是想在达到特定错误时停止传播concat(在本例中为HttpException 403),另一方面,我想在没有任何403 HttpException时继续执行concat。
我已经完成了下面的代码,但是到目前为止,我还不能将当前的可观察对象替换为observable .error(throwable)来执行concat。
是否有一种方法可以在不改变可观察逻辑或订阅者逻辑的情况下做到这一点?或者停止在特定错误上传播concat,并在给出其他错误时继续?
Observable.concat(getObservable1(), getObservable2())
.onErrorResumeNext(new Func1<Throwable, Observable<? extends OperationModel>>() {
@Override
public Observable<? extends OperationModel> call(Throwable throwable) {
if(throwable instanceof HttpException && ((HttpException)throwable).code() == 403) {
return Observable.error(throwable);
}
return Observable.empty(); //here I just want to proceed the concat despite giving an error
}
.subscribeOn(Schedulers.io()) //execute requests should be on io() thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CustomRequestSubscriber<>());
试试这个:
Observable.concat(getObservable1().onErrorResumeNext(new Func1<Throwable, Observable<? extends OperationModel>>() {
@Override
public Observable<? extends OperationModel> call(Throwable throwable) {
if(throwable instanceof HttpException && ((HttpException)throwable).code() == 403) {
return Observable.error(throwable);
}
return Observable.empty(); //here I just want to proceed the concat despite giving an error
}), getObservable2())
.subscribeOn(Schedulers.io()) //execute requests should be on io() thread
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CustomRequestSubscriber<>());
这会捕获第一个可观察对象中的错误,然后你可以继续处理第二个可观察对象。