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

if error occurred in doAfterSuccess Observer onError not call

当我使用 Single if error throw from doAfterSuccess observer onError not call 和 app crash(UndeliverableException) 进行改造时,但是当我自己创建 Single 并从 doAfterSuccess observer onError 调用中抛出异常时。

为什么 doAfterSuccess 有两种不同的行为方式?

Single协议定义如下:onSubscribe (onSuccess | onError)?。换句话说,如果调用了onSuccess,就不能调用onError,反之亦然。 doAfterSuccess 无处可去关于此协议,为了避免丢失可能重要的异常,它被路由到全局错误处理程序。 wiki 有更详细的解释。

如果您发现自己想在 onSuccess 之后调用 onError,您可能使用了错误的类型。 Observable 协议允许从 whitin 或 onNext.

之后调用 onError

或者,在不可靠的 onSuccess 处理程序中使用 try-catch 并调用与从 onError.

调用相同的代码
Single.just(1)
.doAfterSuccess(v -> {
    try {
       process(v);
    } catch (Throwable ex) {
       reportError(ex);
    }
})
.subscribe(v -> { /* ok */ }, e -> { reportError(e); });