我想使用 RXJava 重试运行一个方法
return Observable
.just(myObj)
.flatMap(doc ->
myFunc(myObj, ....)
)
.doOnError(e -> log.Error())
.onErrorResumeNext(myObj2 ->
methodIWantToRunWithRetries(...)
.onErrorResumeNext(myObj3 ->
methodIWantToRunWithRetries(...)
)
);
}
如果我使用 onErrorResumeNext
,我需要根据需要重试多次来嵌套它。
(除非我想用 try/catch 包围它)
是否可以选择使用 RXJava 方法来实现它?
最佳答案
RxJava 提供了标准的重试运算符,可以让您重试多次,如果异常匹配谓词或有一些复杂的重试逻辑则重试。前两种用法最简单:
source.retry(5).subscribe(...)
source.retry(e -> e instanceof IOException).subscribe(...);
后者需要组装一个辅助可观察对象,现在可以附加延迟、计数器等:
source.retryWhen(o -> o.delay(100, TimeUnit.MILLISECONDS)).subscribe(...)
关于java - 在 RXjava 中应用重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34740091/