Java Reactor Flux/Mono,doOnNext 在元素发出之前或之后何时触发



我有这种困惑,doOnNext 何时在 Publisher (Flux/Mono( 的元素发射之前或之后触发。

它是在元素发布之后 - 根据定义,它必须是在之后,否则传递给doOnNextConsumer将无法访问发出的元素。

但是,doOnNext()是在订阅者之前调用的。例如:

Flux.just("first", "second")
        .doOnNext(x -> System.out.println(x + " onNext"))
        .subscribe(System.out::println);

。将输出:

first onNext
first
second onNext
second

怕你还没有正确理解反应,这完全没问题:)。在 Rx 中,订阅是自下而上的。请考虑以下代码:

Flux<Integer> f = Flux.fromIterable(Arrays.asList(1,2,3));

由于没有订阅者,因此不会发生任何事情。不会发出任何项目。现在考虑一下:

f.subscribe(System.out::println)

发生的情况是订阅者订阅通量,并发出项目。

现在考虑一下:

f.doOnNext(System.out::println).subscribe(System.out.println);

请记住,订阅以自下而上的方式进行。所以在这里,订阅者订阅doOnNext()doOnNext()订阅原始通量,然后开始发出事件。 然后doOnNext()截获每个事件并执行一些副作用。

最新更新