我的理解是,当一个Mono被订阅时,第一个信号是doOnNext,然后是doOnSuccess,然后是doOnTerminate,但是当我运行下面的代码时,这些方法的执行顺序是它们被链接的顺序,即doOnTerminate、doOnSuccess、doOnNext。如果我改变链式的顺序,顺序也会变。
@Test
public void doOnsMono(){
Mono<String> 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
有谁能解释一下我的理解中的这种行为或差距。
发布于 2022-08-30 16:10:16
发布于 2022-08-31 13:40:23
通过了@Ikatoforis共享的链接并运行了测试示例,下面是我推导出的(我在注释中发布的相同内容),哪个方法被调用取决于Mono中的内容以及它是否成功完成。至于调用它们的序列,这与mono本身的“生命周期”无关,而是基于链接序列触发的。
https://stackoverflow.com/questions/73544130
复制相似问题