我试图在重复耗尽后用以下方法执行代码 onErrorResume
但onErrorResume没有被触发。
以下是代码示例
Mono.just(request)
.filter(this::isConditionSatified)
.map(aBoolean -> performSomeOperationIfConditionIsSatified(request))
.repeatWhenEmpty(Repeat.onlyIf(i -> true)
.exponentialBackoff(Duration.ofSeconds(5)), Duration.ofSeconds(10))
.timeout(Duration.ofSeconds(30)))
.delaySubscription(Duration.ofSeconds(10)))
.onErrorResume(throwable -> {
log.warn("Max timeout reached", throwable);
return Mono.just(false);
});
onErrorResume
永远不会被触发。我试图用它作为一个后备方案。我的目标是,如果重复耗尽被击中,就返回这个 false
值。
我的单元测试抱怨
expectation "expectNext(false)" failed (expected: onNext(false); actual: onComplete())
任何帮助或建议都会有帮助。
因为一个 empty
源本身是有效的。repeatWhenEmpty
不一定会在用尽尝试后传播异常。异常的 Repeat
的util不会,即使当 "超时 "触发时也不会(正如在 timeout
参数的javadoc。"超时后不会再有新的重复请求",好吧,可以说得更清楚一些)。)
因为你使用的是 repeatWhenEMPTY
我猜想,空箱对你来说总是 "无关紧要 "的,因此...。defaultIfEmpty(false)
应是可接受的解决方案。