Реактивное программирование в конечном итоге в неправильном порядке - PullRequest
0 голосов
/ 22 июня 2019

При условии, что у меня есть 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
...