Reactor多次使用doOnNext

问题描述 投票:0回答:2

我试图从这里更改一些反应器样本,我对我得到的行为有点困惑。

所以首先我这样编码:

    EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect();
    Flux<String> flux = stream
            .doOnNext(s -> System.out.println("1 " + s))
            .doOnNext(s -> System.out.println("2 " + s));
    flux.subscribe();
    stream.onNext("Hello");

此代码按预期打印两行:

1 Hello
2 Hello

但是,如果我添加一个中间变量,假装我是从某种方法获取它的,或者为了提高可读性,代码的行为就会开始不同。

    EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect();
    Flux<String> flux = stream
            .doOnNext(s -> System.out.println("1 " + s));
    flux .doOnNext(s -> System.out.println("2 " + s));
    flux.subscribe();
    stream.onNext("Hello");

所以对于上面的代码我只得到一行,即:

1 Hello

任何人都可以解释这种行为吗?

reactor
2个回答
4
投票

感谢 Stephane Maldini,我意识到 Flux 是不可变的,每个操作都会产生不同的流。 讨论在这里


0
投票

也许一些代码片段可以帮助人们快速理解,在你的第二个代码示例中:

flux.doOnNext(s -> System.out.println("2 " + s));

应改为:

flux = flux.doOnNext(s -> System.out.println("2 " + s));

© www.soinside.com 2019 - 2024. All rights reserved.