RxJava - 在给出异常后继续连续

iGo*_*oDa 3 android rx-java

我试图顺序运行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<>());
Run Code Online (Sandbox Code Playgroud)

小智 10

试试这个:

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<>());
Run Code Online (Sandbox Code Playgroud)

这应该捕获第一个observable中的错误,然后你可以继续第二个observable.