我正在尝试顺序运行2个observable,但是,如果第一个给出了一个特定的错误,我想停止concat并执行另一个东西。
尽管如此,第一个observable可能会给出很多异常,我只是想在达到特定错误时停止传播concat(在这种情况下是HttpException 403),另一方面我想在没有时继续执行concat执行任何403 HttpException。
我已经完成了以下代码,但到目前为止,我无法继续执行concat执行,将当前的observable替换为Observable.error(throwable)。
有没有一种方法可以在不改变可观察逻辑或用户逻辑的情况下完成它? 或者某些东西停止在特定错误上传播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<>());
答案 0 :(得分:9)
试试这个:
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<>());
这应该捕获第一个observable中的错误,然后你可以继续第二个observable。