Допустим, у меня есть поток, выполняющий опасную операцию:
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 до передается в обработчик ошибок? ++
Если я обработаю ExceptionB
в каждой onError, то я дублирую много кода.Если я удаляю блок onError из каждого потока целиком и полагаюсь только на глобальный RxJavaPlugins.setErrorHandler()
, я не смогу обработать ExceptionA
специфичным для потока способом.
++ илиеще лучше, не передаваться обработчику ошибок, специфичному для потока, и вместо этого избавляться от потока.