我试图从这里更改一些反应器样本,我对我得到的行为有点困惑。
所以首先我这样编码:
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
任何人都可以解释这种行为吗?
感谢 Stephane Maldini,我意识到 Flux 是不可变的,每个操作都会产生不同的流。 讨论在这里
也许一些代码片段可以帮助人们快速理解,在你的第二个代码示例中:
flux.doOnNext(s -> System.out.println("2 " + s));
应改为:
flux = flux.doOnNext(s -> System.out.println("2 " + s));