以下所有代码均无法打印任何内容。为什么呢?
ConnectableFlux<Integer> publish = Flux.just(1)
.publish();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.flatMap(x -> publish)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.publish()
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.publish()
.doOnNext(System.out::println)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
答案 0 :(得分:1)
.connect
ConnectableFlux
个离子
在所有这些示例中,都错过了.connect
离子声明。
对于第一种情况,为了使其正常运行,我们还必须.connect
来publish
ConnectableFlux
:
ConnectableFlux<Integer> publish = Flux.just(1)
.publish();
ConnectableFlux<Integer> publish1 = Flux.just(2)
.flatMap(x -> publish)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
publish.connect();
对于以下两个例子,我们有类似的东西。当我们使用Flux.just(...).publish().publish()
时,我们会创建两个ConnectableFlux
。这里的问题是第一个被删除。如果必须有后续的.publish
(这是非常不合逻辑的),我们可以使用以下技术来避免删除之前的ConnectableFlux
es:
ConnectableFlux<Integer> publish1 = Flux.just(2)
.publish()
.autoConnect() // or .autoConnect(0)
.doOnNext(System.out::println)
.publish();
publish1.subscribe(System.out::println, System.out::println, System.out::println);
publish1.connect();
在该示例中,我们使用.autoConnect()
运算符,.autoConnect(0)
只是ConnectableFlux#connect
和return this;
语句的组合。如果使用.autoConnect(>0)
,则会对初始来源使用一些延迟订阅,这听起来像“只有当我们 N 订阅者时才连接到初始来源<” / p>