doOnNext,doOnSuccess,doOnTerminate的执行顺序

我的理解是,当一个Mono被订阅时,第一个信号是doOnNext,然后是doOnSuccess,然后是doOnTerminate,但是当我运行下面的代码时,这些方法的执行顺序是它们被链接的顺序,即doOnTerminate、doOnSuccess、doOnNext。如果我改变链式的顺序,顺序也会变。

代码语言:javascript复制@Test

public void doOnsMono(){

Mono mono = Mono.just("ABC");

mono.doOnSubscribe(s -> System.out.println("Just got subscribed") )

.doOnTerminate(() -> System.out.println("Termination happens at the end"))

.doOnSuccess(s -> System.out.println("I am successfull " + s))

.doOnNext(s -> System.out.println("next next next" + s))

.subscribe(s -> System.out.println("Subscribe" + s));

}输出是如此的刚刚被订阅

终止发生在最后

我是成功的ABC

下一个nextABC

SubscribeABC

有谁能解释一下我的理解中的这种行为或差距。