在链obs1.flatmap(x -> obs2()).subscribe(sub)
中,如果obs2
产生错误,则会导致onError
上的即时调用sub
。这是记录在案的:
请注意,如果任何单个Observable映射到项目 来自flatMap的Observable通过调用onError来中止 flatMap生成的Observable本身会立即中止 调用onError。
但是可以忽略obs2
错误并让obs1
继续发出错误吗?
答案 0 :(得分:10)
Rx为一些运营商提供了处理错误的方法。只需从obs2创建第三个Observable,它不会传播错误。
Observable<YourType> obs3 = obs2.onErrorResumeNext(Observable.<YourType>empty());
obs1.flatmap(x -> obs3)
答案 1 :(得分:4)
.onErrorResumeNext
- 你可以使用它来尝试以不同的方式处理它,这样你就会传递先前发出的值,当处理时会产生错误到另一个observable,你可以尝试另一种方法。或者处理错误案例。
.onErrorReturn
- 如果你没问题,只需返回一些默认值并忽略错误。
答案 2 :(得分:0)
你不能在obs2()
内创建一个大型的试用博客,并将捕获博客留空吗?不会抛出任何错误,因此onError
sub
不会被调用,是吗?