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