如果错误发生在 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); });
当我使用 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); });