我必须在沙发床中插入文档列表。我正在使用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();
}
答案 0 :(得分:4)
您可以将错误更改为完成,这意味着获取一个文档的失败不会影响其他文档。
更改为:
...
.flatMap(docToInsert->asyncBucket.insert(docToInsert)
.retryWhen(retryFunc())
.onErrorResumeNext(Observable.empty())
...
使用onErrorResumeNext()
表示此可观察链正常完成,因此不会影响任何其他链。