假设我有一个执行危险操作的流:
void main() {
Observable.just(1)
.doOnNext(integer -> dangerousOperation())
.subscribe(
integer -> {
// TODO
},
error -> {
if (error instanceof ExceptionA) {
// recover gracefully
}
});
}
void dangerousOperation() {
throw new ExceptionA();
}
比方说,我在应用程序的许多地方都执行了此危险操作。在每个流中,我添加了一些特定于每个流的恢复代码。
我现在需要在危险操作中添加一个新错误:
void dangerousOperation() {
Random random = new Random();
if (random.nextBoolean()) {
throw new ExceptionA();
} else {
throw new ExceptionB();
}
}
此外,我想以无处不在的方式从ExceptionB
中恢复。换句话说,我想以特定于流的方式处理ExceptionA
,并以全局方式处理ExceptionB
。
有没有一种方法可以在每个 RxJava流中之前将其“拦截”到错误中?++
如果我在每个onError中处理ExceptionB
,那么我正在复制很多代码。如果我从每个流中完全删除onError块,仅依靠全局RxJavaPlugins.setErrorHandler()
,我将无法以特定于流的方式处理ExceptionA
。
++或更高版本,根本没有传递到特定于流的错误处理程序,而是处理该流。
答案 0 :(得分:0)
如何编写处理全局错误实现的函数,然后返回处理错误的状态。然后使用状态可以处理其他异常情况。
boolean handleException(Exception error) {
if (error instanceof ExceptionB) {
// handle the global exception here
return true;
}
return false;
}
现在,从每个流错误实现中,您都可以调用上述函数来处理全局错误情况
error -> {
if (!handleException(error) {
// handle the other specific cases here
}
});