gpt4 book ai didi

java - doOnError 没有捕获异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:42:36 24 4
gpt4 key购买 nike

我刚刚开始使用 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();

反转函数:

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

第一个正常执行,当抛出异常时执行 onError。但另一方面,第二个不起作用,所以异常一直抛到调用方法。

这两段代码有什么区别?

最佳答案

请记住,.doOnError() 会捕获异常,对其进行处理然后重新抛出。如果您想要不同的行为,请使用其中一种 .onError* 方法。

现在,异常没有传播到#1 中的调用者但在#2 中传播的原因是您在#1 中提供了错误处理程序,但没有在#2 中提供,在这种情况下默认为传播异常。

关于java - doOnError 没有捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com