Rx java 如果某个可观察到的抛出异常,如何继续流?

Rx java 如果某个可观察到的抛出异常,如何继续流?,rx-java,couchbase,Rx Java,Couchbase,我必须在couchbase中插入文件列表。我正在使用RxJava和asyncbucket来使用下面提到的代码。retryWhen函数以指数方式尝试保存文档3次 我的问题是:如果失败怎么办?另一个列表是否会继续保存,或者抛出错误并停止可观察对象?如果是,我如何使可观察列表继续尝试保存剩余列表 Observable .from(docs) .subscribeOn(Schedulers.io()) .flatMap(docToInsert->asyncBucket.in

我必须在couchbase中插入文件列表。我正在使用RxJava和asyncbucket来使用下面提到的代码。retryWhen函数以指数方式尝试保存文档3次

我的问题是:如果失败怎么办?另一个列表是否会继续保存,或者抛出错误并停止可观察对象?如果是,我如何使可观察列表继续尝试保存剩余列表

Observable
    .from(docs)
    .subscribeOn(Schedulers.io())
    .flatMap(docToInsert->asyncBucket.insert(docToInsert).retryWhen(retryFunc()))
    .toBlocking()
    .last();

public static RetryWhenFunction retryFunc() {
    return RetryBuilder.anyOf(TemporaryFailureException.class,RequestCancelledException.class,
            TimeoutException.class).delay(Delay.exponential(TimeUnit.SECONDS, 10)).max(3).build();
}

您可以将错误更改为完成,这意味着获取一个文档失败不会影响其他文档

改为:

...
.flatMap(docToInsert->asyncBucket.insert(docToInsert)
                        .retryWhen(retryFunc())
                        .onErrorResumeNext(Observable.empty())
...

使用
onErrorResumeNext()
宣布此可观察链正常完成,因此不会影响任何其他链。

太好了。谢谢另外,如果我必须记录异常(例如,某某文档失败),我们如何在此处调整该异常?您可以在
retryWhen()操作符之前添加
do出错()
操作符。在该范围内,您将获得发生的错误和
docToInsert
信息。完美!再次感谢!