Как видно из подписи из onErrorResume()
, резервная функция может привести только к моно того же типа, что и исходный моно. Это не зря.
Что, если у вас вместо этого Mono<A> mono = Mono.just(new A());
. Теперь не будет выдано никакой ошибки, поэтому резервная функция никогда не будет вызываться. Следовательно, у вас все еще есть Mono<A>
, , а не a Mono<B>
.
В Reactor нет ничего особенного. Рассмотрим тот же тип потока с использованием catch:
public B foo() {
try {
// throw new RuntimeException();
return new A();
} catch (Exception e) {
return new B();
}
}
Очевидно, этот код не компилируется, потому что, если ошибка не выдана, будет возвращено A
, но метод должен вернуть B
. По сути, это то, что вы пытаетесь написать, но с помощью Reactor.