dvs*_*gec 5 java project-reactor
我有这个困惑,什么时候 doOnNext 是在 Publisher (Flux/Mono) 元素发射之前或之后触发的。
这是后发布的元素-它已成为定义之后,否则Consumer传递到doOnNext就无法获得所发出的元素。
但是,在订阅者之前doOnNext()调用。例如:
Flux.just("first", "second")
.doOnNext(x -> System.out.println(x + " onNext"))
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
...会输出:
first onNext
first
second onNext
second
Run Code Online (Sandbox Code Playgroud)
恐怕你没有正确理解反应式,这很好:)。在 Rx 中,订阅是自下而上的。考虑以下代码:
Flux<Integer> f = Flux.fromIterable(Arrays.asList(1,2,3));
Run Code Online (Sandbox Code Playgroud)
由于没有订阅者,因此什么也不会发生。不会发出任何项目。现在考虑这个:
f.subscribe(System.out::println)
Run Code Online (Sandbox Code Playgroud)
发生的事情是订阅者订阅了通量,并且项目被发射。
现在考虑这个:
f.doOnNext(System.out::println).subscribe(System.out.println);
Run Code Online (Sandbox Code Playgroud)
请记住,订阅是以自下而上的方式发生的。所以在这里,用户签约的doOnNext(),并doOnNext()订阅了原来的流量,然后开始发射事件。doOnNext()然后拦截每个事件并执行一些副作用。
| 归档时间: |
|
| 查看次数: |
6696 次 |
| 最近记录: |