RxJava: Как обработать исключение, сгенерированное в последовательности нескольких вызовов, используя оператор flatMap? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь реализовать следующий код, в котором множественные вызовы выполняются последовательно с использованием оператора 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}
}
...