反应链中 next() 的奇怪行为
Weird Behaviour of next() In Reactive Chain
首先,这是我的代码:
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
如您所说,next()
采用通量的第一个元素创建单声道。 Mono 是 0 或 1 值。所以订阅时你只会收到原始Flux的第一个值。
看看大理石:
看看如何在第一个值之后立即发出完整的。
因此,如果我们将此应用到您的代码中,我们就得到了
737 -> 747 -> 757 -> 777 |
onNext
print 737
next()
737 -> |
subscribe()
print 737
首先,这是我的代码:
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
如您所说,next()
采用通量的第一个元素创建单声道。 Mono 是 0 或 1 值。所以订阅时你只会收到原始Flux的第一个值。
看看大理石:
看看如何在第一个值之后立即发出完整的。
因此,如果我们将此应用到您的代码中,我们就得到了
737 -> 747 -> 757 -> 777 |
onNext
print 737
next()
737 -> |
subscribe()
print 737