我正在学习RxJava,而且我在很多地方都看到错误可以通过这种方式处理:
repository.getById(10).subscribe(new Action1<User>() {
@Override
public void call(User user) {
//Do something
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable t) {
if (t instanceof FirstErrorException) {
handleFirstError((FirstErrorException) t);
} else if (t instanceof FirstErrorException) {
handleSecondError((SecondErrorException) t);
} else {
//and so on...
}
}
});
我是唯一一个认为这是非常糟糕的代码吗?我怎样才能让它变得更好?我虽然使用Visitor
模式&#34;访问&#34;我的基本异常的每种具体类型,但onError
方法始终需要Action1<Throwable>
;您无法使用自己的基本例外,只需Throwable
。
答案 0 :(得分:6)
救援的错误处理程序:
<T,E extends Throwable> Observable<T>
whenExceptionIs(Class<E> what, Func1<E,Observable<T>> result) {
return t -> {
return what.isInstance(t) ? result.call(t) : Observable.error(t);
};
}
你这样使用:
Observable<Foo> obs = ...
.onErrorResumeNext(whenExceptionIs(IllegalArgumentException.class, t-> Observable.just(Foo.newInstance())))
.onErrorResumeNext(whenExceptionIs(IOException.class, t-> Observable.error(new XyzzyException("",t))))
....