反应链中next()的奇怪行为

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

首先,这是我的代码:

public static void main(String[] args) {
    List<String> l1 = Arrays.asList("737", "747");
    Flux<String> f1 = Flux.fromIterable(l1);

    List<String> l2 = Arrays.asList("757", "777");
    Flux<String> f2 = Flux.fromIterable(l1);

   f1.mergeWith(f2)
    .doOnNext(a -> System.out.println(a))
    .next()
    .subscribe(a -> System.out.println(a));
}

这是我期待的输出:

737

747

757

777

737

正如next()的文档所说,它需要第一个元素,从中创建一个Mono,并取消订阅。

我得到的输出是:

737

737
java reactor
1个回答
2
投票

正如你所说,next()采用助焊剂的第一个元素创造一个单声道。单声道是0或1值。因此,在订阅时,您只会收到原始Flux的第一个值。

看看大理石:next marble

查看完成后如何在第一个值之后发出完整。

因此,如果我们将此应用于您的代码,我们就有

737 -> 747 -> 757 -> 777 |

onNext

print 737

next()

737 -> |

subscribe()

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