我想运行一个使用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(...)