反应链中 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