doOnError 不捕获异常

2022-09-04 08:13:55

我刚刚开始使用RxJava,但也许有些东西还没有点击。

1.

Integer[] items = {1, 2, 3, 0, 0, 4, 5, 6, 1};
Observable.from(items)
        .map(this::invert)
        .subscribe(i -> Log.d(LOG_TAG, "Inverted: " + i), t -> Log.d(LOG_TAG, "Error: " + t.getMessage()));

2.

Integer[] items = {1, 2, 3, 0, 0, 4, 5, 6, 1};
Observable.from(items)
        .map(this::invert)
        .doOnError(t -> Log.d(LOG_TAG, "Error: " + t.getMessage()))
        .doOnNext(i -> Log.d(LOG_TAG, "Inverted: " + i))
        .subscribe();

功能:invert

int invert(int i) {
    return 1 / i;
}

第一个正常执行,当引发异常时,将执行。但另一方面,第二个不起作用,因此异常一直抛到调用方法。onError

这两个代码块之间有什么区别?


答案 1

请记住,它会捕获异常,对它执行某些操作,然后重新引发它。如果需要不同的行为,请使用其中一种方法。.doOnError().onError*

现在,异常不会传播到 #1 中的调用方,而是在 #2 中传播到调用方的原因是,您在 #1 中提供了错误处理程序,但在 #2 中未提供错误处理程序,在这种情况下,默认值是传播异常。


答案 2

推荐