RxJava FlatMap:如何跳过错误?

9
在链式结构中,如果obs2产生错误,那么在obs1.flatmap(x -> obs2()).subscribe(sub)中会立即调用subonError方法。这个行为在文档中有说明:

请注意,如果由flatMap映射到源Observable项的任何单个Observable通过调用onError而中止,flatMap生成的Observable将本身立即中止并调用onError。

但是,是否可以忽略obs2的错误,并使obs1继续发出信号呢?
3个回答

11

Rx提供了一些操作符来处理错误。只需从obs2创建第三个Observable,它不会传播错误。

Observable<YourType> obs3 = obs2.onErrorResumeNext(Observable.<YourType>empty());
obs1.flatmap(x -> obs3)

并且它可以内联: obs1.flatMap(x -> obs2.onErrorResumeNext(Observable.empty())) - gmk57
但是如果可以继续从源接收下一个值呢? - tmucha
我没有理解你的问题。也许这是一个适合单独提出的好问题? - Geoffrey Marizy

4

.onErrorResumeNext - 你可以使用它来尝试以不同的方式处理错误,这样你将传递先前发出的值,当处理时产生错误,传递到另一个可观察对象中,在那里你可以尝试另一种方法。或者处理错误情况。

.onErrorReturn - 如果你觉得可以,只需返回一些默认值并忽略错误即可。


-2

你不能只是在 obs2() 内部创建一个大的 try-catch 语句块,然后将 catch 块留空吗?这样就不会抛出错误,因此 subonError 函数也不会被调用,对吧?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接