当前位置: 首页 > 知识库问答 >
问题:

单声道#then和单声道#and的区别?

云弘壮
2023-03-14

给定以下monos:

Mono<Void> mono1 = Mono.fromRunnable(() -> {
    System.out.println("sleep1");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        throw new IllegalStateException(e);
    }
    System.out.println("mono1");
});
Mono<Void> mono2 = Mono.fromRunnable(() -> {
    System.out.println("mono2");
});
Mono<Void> mono3 = Mono.fromRunnable(() -> {
    System.out.println("mono3");
});

双:

mono1
        .then(mono2)
        .then(mono3)
        .block();

和:

mono1
        .and(mono2)
        .and(mono3)
        .block();

具有相同的输出:

sleep
mono1
mono2
mono3

Mono#thenMono#之间有什么区别,在这种情况下?

从https://projectreactor.io/docs/core/release/reference/index.html#which-operator:

[如果你]有一个序列,但[你]对值不感兴趣,并且[你]想在最后切换到另一个单声道,[使用]单声道#then(单声道)

[如果您]希望通过将发布者从1个Mono和任何源端协调到一个Mono来组合发布者,[使用]mono35;和

不幸的是,这并没有帮助我找到< code>#and和< code>#then行为不同的情况。

共有1个答案

司易安
2023-03-14

< code >单声道#和只是“将来自当前单声道和另一个信号源的终止信号加入返回的无效单声道”。它总是返回< code >单声道

Mono#然后让您将两个Monos链接在一起,最终结果将由作为参数传递的Mono确定。从这个意义上说,Mono#then是一个更原始的monoflatmap,唯一的区别是在MonoŠflatMap的内部,您可以访问链中先前的Mono的结果,您可以将其转换为另一个Mono实例。

除此之外,使用Mono#,操作将按顺序执行,而使用Mono#并且不能保证排序(至少从文档中)。

 类似资料:
  • 问题内容: 为了帮助理解monad是什么,有人可以使用Java提供示例吗?有可能吗? 如果您从此处http://jdk8.java.net/lambda/下载预发行版本的兼容Lambda的JDK8,则可以使用Java使用Lambda表达式。 下面显示了使用此JDK的lambda示例,有人可以提供相对简单的monad吗? 问题答案: 仅供参考: 提出的JDK8可选类 确实满足 了Monad的三个定律

  • 我的代码如下。我需要从mongo db获得每次旅行的车费,然后将每次旅行的所有车费相加,得到总车费。我被一种我不知道如何阅读的单声道音乐所困扰。我试着把它转换成通量,但我得到了通量 "'

  • 我在我的项目中使用了spring-boot-starter-webflux、ractor-test和spring-boot-starter-test 2.0.0.m7。在我的中有一个,您可以通过方法添加字符串值。还可以询问通过方法添加到列表中的所有值。问题是如何测试?我有,但它似乎不起作用,因为返回的总是0。我知道问题是中的方法,但我不知道原因和如何解决它。有人知道我应该如何创建一个有效的Juni

  • 我最近一直在学习使用Java中的reactor库和Spring框架进行反应式编程,并且在很大程度上我已经能够掌握它。然而,我发现自己有好几次遇到同样的情况,我想知道我哪里出了问题。 我正在努力解决的问题的要点是,我经常想用mono做一些事情,比如找到一些补充数据,然后将其添加回原始mono中。zip函数在我看来是一个理想的候选函数,但最终我订阅了两次原始mono,这不是我的意图。 这里有一个人为的

  • 我不知道或问这个问题,除了这里,如果不是我道歉的地方。 这里有一个REST请求,它附带了一个简单的bean,其中包含一个列表等属性。对此列表进行迭代,以使用返回Mono(findOne)的响应mongo调用。但我不认为我找到了正确的方法: 在我看来,“反应性”的想法并不是必须做一个块,但我没有找到如何做,否则。 有人能帮我找到做这项任务的最佳方法吗?

  • 问题内容: 我在这里遇到以下问题:我得到了一个代表音频数据的字节块(uint16_t *),并且生成它们的设备正在捕获单声道声音,因此很明显,我在1通道上具有单声道音频数据。我需要将此数据传递到另一台设备,该设备需要交错的立体声数据(因此为2个通道)。我要做的基本上是复制数据中的1通道,以便立体声数据的两个通道都包含相同的字节。您能指出一个有效的算法吗? 谢谢,f。 问题答案: 如果只需要交错的立