RxJava:如何使用flatMap运算符处理按多次调用顺序生成的异常?

时间:2018-11-20 07:57:02

标签: rx-java reactive-programming rx-java2

我正在尝试实现以下代码,其中使用flatmap运算符依次进行多个调用。 private Observable<Context> getObservable1(Context context)引发异常,并且流程应停止进一步执行并返回异常,然后将在accept()方法中处理该异常,并将响应返回给函数的调用者

关于如何实现相同的任何指针将不胜感激?

public class UserLoad {  
    public void accept(){
         Observable.just(context)
         .flatMap(context -> validationBA.execute(context)
         .flatMap(context->{
            if(isPresent(context)){
                Observable<Context> observableB = getObservableB(context);
                        return observableB;
            }else{
                Observable<Context> observableA = getObservableA(context);
                        return observableA;
            }
         })
         .subscribe((onNext) -> {
                    //handle success here
                }, (onError) -> {
                    //handle error here [expect to handle the error here and not execute other calls in the sequence]
         });
    }

    private Observable<Context> getObservableB(Context context) {
        return Observable.just(context)
                .flatMap(this::getObservable1)
                .flatMap(this::getObservable2)
                .flatMap(this::getObservable3)
                .flatMap(ClassB::execute);
    }

    private Observable<Context> getObservableA(Context context) {
        return Observable.just(context)
                .flatMap(this::getObservable1)
                .flatMap(this::getObservable2)
                .flatMap(this::getObservable3)
                .flatMap(ClassA::execute);
    }

    private Observable<Context> getObservable1(Context context) {
        return UserService.execute(context)
            .map(response -> {
                if(null==response){ 
                    throw new UserException;
                }
                return response;
            });     
    }

    private Observable<Context> getObservable2(Context context) {//some implementation}

    private Observable<Context> getObservable3(Context context) {//some implementation}
}

0 个答案:

没有答案