doOnError 没有捕获异常
doOnError does not catch the exception
我刚刚开始使用 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
。但另一方面,第二个不起作用,所以异常一直抛到调用方法。
这两段代码有什么区别?
请记住,.doOnError()
捕获异常,对其进行处理,然后重新抛出它。如果您想要不同的行为,请使用 .onError*
方法之一。
现在,异常没有传播到#1 中的调用者但在#2 中传播的原因是您在#1 中提供了错误处理程序,但没有在#2 中提供,在这种情况下,默认是传播异常。
我刚刚开始使用 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
。但另一方面,第二个不起作用,所以异常一直抛到调用方法。
这两段代码有什么区别?
请记住,.doOnError()
捕获异常,对其进行处理,然后重新抛出它。如果您想要不同的行为,请使用 .onError*
方法之一。
现在,异常没有传播到#1 中的调用者但在#2 中传播的原因是您在#1 中提供了错误处理程序,但没有在#2 中提供,在这种情况下,默认是传播异常。