我想运行一个使用RXJava重试的方法
return Observable
.just(myObj)
.flatMap(doc ->
myFunc(myObj, ....)
)
.doOnError(e -> log.Error())
.onErrorResumeNext(myObj2 ->
methodIWantToRunWithRetries(...)
.onErrorResumeNext(myObj3 ->
methodIWantToRunWithRetries(...)
)
);
}
如果我使用onErrorResumeNext
,我需要多次嵌套我想要重试
(除非我想用try / catch包围它)
是否可以选择使用RXJava方法实现它?
答案 0 :(得分:7)
RxJava提供标准重试运算符,允许您重试多次,如果异常与谓词匹配或具有一些复杂的重试逻辑,则重试。前两个使用最简单:
source.retry(5).subscribe(...)
source.retry(e -> e instanceof IOException).subscribe(...);
后者需要组装一个二级观察者,现在可以附加延迟,计数器等:
source.retryWhen(o -> o.delay(100, TimeUnit.MILLISECONDS)).subscribe(...)