如果在doAfterSuccess Observer onError中发生错误则不会调用

时间:2017-11-24 13:09:09

标签: android rx-java2

当我使用单一改造时如果从doAfterSuccess观察者错误抛出onError而不是调用和应用程序崩溃(UndeliverableException)但是当我自己创建Single并从doAfterSuccess观察者onError调用抛出异常时。

为什么AfterSuccess表现出两种不同的方式?。

1 个答案:

答案 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); });