在RXjava中应用重试机制

4

我想使用RXJava运行一个带有重试的方法

return Observable
        .just(myObj)
        .flatMap(doc ->
                myFunc(myObj, ....)
        )
        .doOnError(e -> log.Error())
        .onErrorResumeNext(myObj2 ->
                methodIWantToRunWithRetries(...)
                        .onErrorResumeNext(myObj3 ->
                                methodIWantToRunWithRetries(...)
                        )

        );
}

如果我使用onErrorResumeNext,我需要嵌套它多次以获得重试的次数。
(除非我想用try/catch包围它)
是否有一种用RXJava方法实现它的选项?

3
你尝试过使用retryWhen操作符吗?http://reactivex.io/documentation/operators/retry.html - Laurent Doguin
1个回答

8

RxJava提供了标准的重试操作符,让您可以重试若干次,如果异常匹配谓词则重试,或者有一些复杂的重试逻辑。前两种用法最简单:

source.retry(5).subscribe(...)

source.retry(e -> e instanceof IOException).subscribe(...);

后者需要组装一个次要的可观测对象,现在可以附加延迟、计数器等:
source.retryWhen(o -> o.delay(100, TimeUnit.MILLISECONDS)).subscribe(...)

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