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