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

时间:2019-02-25 10:21:14

标签: java reactor

首先,这是我的代码:

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

1 个答案:

答案 0 :(得分:2)

正如您所说的next()采用通量的第一个元素创建一个Mono。 Mono是0或1值。因此,订阅时,您只会收到原始通量的第一个值。

看看大理石: next marble

看看在第一个值之后立即发出完成。

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

737 -> 747 -> 757 -> 777 |

onNext

print 737

next()

737 -> |

subscribe()

print 737