【发布时间】:2022-11-27 07:27:13
【问题描述】:
重复操作符可以让流重新订阅,我发现了一些在不同情况下的行为。
示例代码如下:
Mono.just(5)
.doOnNext(i -> System.out.println("next 1: " + i))
.doOnNext(i -> System.out.println("next 2: " + i))
.doOnNext(i -> System.out.println("next 3: " + i))
.repeat(2)
.subscribe();
输出:
next 1: 5
next 2: 5
next 3: 5
next 1: 5
next 2: 5
next 3: 5
next 1: 5
next 2: 5
next 3: 5
这当然是对的。然后我改变重复位置。
Mono.just(5)
.doOnNext(i -> System.out.println("next 1: " + i))
.repeat(2)
.doOnNext(i -> System.out.println("next 2: " + i))
.doOnNext(i -> System.out.println("next 3: " + i))
.subscribe();
输出与之前相同。
next 1: 5
next 2: 5
next 3: 5
next 1: 5
next 2: 5
next 3: 5
next 1: 5
next 2: 5
next 3: 5
所以我觉得不能影响原始流的执行顺序。
当我将 then 运算符添加到流中时。
Mono.just(5)
.doOnNext(i -> System.out.println("next 1: " + i))
.doOnNext(i -> System.out.println("next 2: " + i))
.then(Mono.just("hello"))
.doOnNext(i -> System.out.println("next 3: " + i))
.repeat(2)
.subscribe();
输出:
next 1: 5
next 2: 5
next 3: hello
next 1: 5
next 2: 5
next 3: hello
next 1: 5
next 2: 5
next 3: hello
好像重新订阅了所有的流,我又换了位置。
Mono.just(5)
.doOnNext(i -> System.out.println("next 1: " + i))
.repeat(2)
.doOnNext(i -> System.out.println("next 2: " + i))
.then(Mono.just("hello"))
.doOnNext(i -> System.out.println("next 3: " + i))
.subscribe();
输出:
next 1: 5
next 2: 5
next 1: 5
next 2: 5
next 1: 5
next 2: 5
next 3: hello
这当然是可能会影响流的执行顺序.
那我就很迷茫了,什么情况会影响不影响呢?
非常感谢
【问题讨论】:
标签: java spring-webflux project-reactor