如果某些可观察到的抛出异常,如何继续播放?

时间:2019-01-23 13:24:03

标签: rx-java 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();
}

1 个答案:

答案 0 :(得分:4)

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

更改为:

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

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