zip和flatMap没有生效
在Reactor 中flatMap和zip等没有生效
最近在项目中使用了 Project Reactor
,但发现代码在写着写着有些地方没有达到效果,有些方法像 zip
、flatMap
等没有执行,那么这个可能是什么原因呢?
1、一个简单的示例代码如下:
public class FluxDemo {
public static Mono<Void> doSomethind01() {
return Flux.just(1, 2, 3, 5, 6).then();
}
public static Flux<Integer> doSomethind02() {
return Flux.just(1, 2, 3, 5, 6);
}
public static void main(String[] args) throws InterruptedException {
// 会有数据打印出来吗 ?
doSomethind01()
.zipWith(Mono.just(10))
.flatMap(tuple -> Mono.just(tuple.getT2() + 10))
.subscribe(i -> System.out.println("doSomethind01返回的是Mono<Void>所以不会执行到这一步"));
// 会有数据打印出来吗 ?
doSomethind02()
.zipWith(Mono.just(10))
.flatMap(tuple -> Mono.just(tuple.getT2() + 10))
.subscribe(i -> System.out.println("result => " + i));
TimeUnit.SECONDS.sleep(10);
}
}
2、示例运行结果
在上面这个示例中,第1⃣️个 不会
输出内容,但是第2⃣️个却 会输出
内容。
3、得到结论
当我们返回 Mono.empty()
或 Mono<Void>
时,有些组合操作,比如 zip
,zipWith
,flatMap
等操作就不会执行。这是因为每个源都需要一个元素来生成它们的输出,而 Mono.empty()或Mono它并不包含元素,所以就不会执行。
本文来自博客园,作者:huan1993,转载请注明原文链接:https://www.cnblogs.com/huan1993/p/15416151.html