При условии, что у меня есть 2 издателя:
Mono<String> mono1 = Mono.just("MONO1")
.name("MONO1")
.doOnSuccessOrError((s,t) -> log.info("doOnSuccessOrError MONO1"))
.doOnTerminate(() -> log.info("doOnTerminate MONO1"))
.doFinally(s -> log.info("doFinally MONO1"));
Mono<String> mono = Mono.just("MONO2")
.name("MONO2")
.flatMap(s -> mono1)
.doOnSuccessOrError((s,t) -> log.info("doOnSuccessOrError MONO2"))
.doOnTerminate(() -> log.info("doOnTerminate MONO2"))
.doFinally(s -> log.info("doFinally MONO2"));
mono.subscribe();
Я не понимаю, почему MONO2 вызывает doFinally / doOnTerminate до того, как MONO1 вызывает его, хотя doOnSuccessOrError находится в обратном порядке.
Результат:
doOnSuccessOrError MONO1
doOnSuccessOrError MONO2
doOnTerminate MONO2
doFinally MONO2
doOnTerminate MONO1
doFinally MONO1
Я бы предпочел, чтобы MONO1 был закончен до MONO2:
doOnSuccessOrError MONO1
doOnTerminate MONO1
doFinally MONO1
doOnSuccessOrError MONO2
doOnTerminate MONO2
doFinally MONO2