当我执行下面的代码(Junit)时,只打印最后一个sys out,即Subscribetest.有人能解释一下为什么doOnSubcribe、doOnSuccess、doOnNext中的系统没有被打印/执行吗?

@Test
    public void doOns(){
        Mono<String> mono = Mono.just("test");
        mono.doOnSubscribe(s -> System.out.println("Just got subscribed" +s ))
                .doOnSuccess(s -> System.out.println("I am successfull" + s))
                .doOnNext(s -> System.out.println("next next next" + s));

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

推荐答案

这是因为你实际上是在打破这条链.你在订阅之前什么都不会发生,但你需要保持链条的完好无损.

您正在做的是首先初始化您的Mono.

那么您就是在声明一个react 流.

然后在最后一行,您实际上订阅了原始的Mono,而不是您预期的react 流.

这就是它应该是什么样子的.

// Here you declare your mono
Mono<String> mono = Mono.just("test");

// Here you add operators which will return 
//a new Mono with your operators attached
Mono<String> stringMono = mono.doOnSubscribe(s -> System.out.println("Just got subscribed" + s))
        .doOnNext(s -> System.out.println("next next next" + s))
        .doOnSuccess(s -> System.out.println("I am successfull" + s));

// Subscribe to the new Mono
stringMono.subscribe(s -> System.out.println("Subscribe " + s));

或者稍微简化一下.

Mono.just("test")
        .doOnSubscribe(s -> System.out.println("Just got subscribed " + s))
        .doOnNext(s -> System.out.println("next next next " + s))
        .doOnSuccess(s -> System.out.println("I am successfull " + s))
        .subscribe(s -> System.out.println("Subscribe " + s));

输出:

Just got subscribed reactor.core.publisher.Operators$ScalarSubscription@5524cca1
next next next test
I am successfull test
Subscribe test

Java相关问答推荐

当耗时的代码完成时,Circular ProgressIndicator显示得太晚

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

Java List with all combinations of 8 booleans

Java inline Double条件和值解装箱崩溃

JVM会优化这个数学运算吗?

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

为什么JAVA&S清洁器使用链表而不是并发HashSet?

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

Javadoc在方法摘要中省略方法

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

虚拟线程应该很快消亡吗?

使用Jackson库反序列化json

没有使用Lombok生成的参数

二进制数据的未知编码/序列化

将ByteBuffer异步写入InputStream或Channel或类似对象

IntelliJ IDEA依赖项工具窗口丢失

在一行中检索字符分隔字符串的第n个值

使用迭代器遍历HashMap不会因IF条件而停止

Maven-Dependency-Plugin 3.6.+开始查找在依赖关系:分析目标期间找到的新的使用的未声明依赖关系