当我使用单一改造时如果从doAfterSuccess观察者错误抛出onError而不是调用和应用程序崩溃(UndeliverableException)但是当我自己创建Single并从doAfterSuccess观察者onError调用抛出异常时。
为什么AfterSuccess表现出两种不同的方式?。
答案 0 :(得分:0)
Single
协议定义如下:onSubscribe (onSuccess | onError)?
。换句话说,如果调用onSuccess
,则无法调用onError
,反之亦然。对于此协议,doAfterSuccess
无处可去,为避免丢失可能的重要异常,它将路由到全局错误处理程序。 wiki有更详细的解释。
如果您发现自己想要在onError
之后调用onSuccess
,则可能使用了错误的类型。 Observable
协议允许从whitin或onError
之后调用onNext
。
或者,在您的不可靠try-catch
处理程序中使用onSuccess
,并调用与您从onError
调用的代码相同的代码。
Single.just(1)
.doAfterSuccess(v -> {
try {
process(v);
} catch (Throwable ex) {
reportError(ex);
}
})
.subscribe(v -> { /* ok */ }, e -> { reportError(e); });