gpt4 book ai didi

java - 寻找一种干净的方法来处理 RxJava 中的错误

转载 作者:行者123 更新时间:2023-12-03 19:35:03 25 4
gpt4 key购买 nike

我正在学习 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 “访问”我的基本异常的每个具体类型的模式,但是 onError方法总是需要 Action1<Throwable> ;您不能使用自己的基本异常,只能使用 Throwable .

最佳答案

救援错误处理程序:

 <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))))
....

关于java - 寻找一种干净的方法来处理 RxJava 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com