doSomething()
только когда-либо называется один раз - то есть, явно, чтобы вы извлекли ошибку на основе Mono
.Возвращаемое Mono
действительно подписывается снова при каждой повторной попытке, но метод, который первоначально возвратил его, больше не вызывается.
Здесь предпочтительнее выполнить рефакторинг вашего кода, чтобы любая сторонаэффекты подписываются на Mono
, например:
private Mono<String> doSomething() {
return Mono.<String>error(new Error()).doOnSubscribe(s -> System.out.println("doSomething"));
}
Однако, если это невозможно, вы можете заставить doSomething()
выполняться как есть при каждой повторной попытке, используя его в качестве поставщика.и выравнивание результата.Если вы хотите пойти по этому маршруту, замените:
myClass.doSomething()
... на:
Mono.fromSupplier(myClass::doSomething).flatMap(p->p)