然后是什么,然后空,然后很多和平面地图很多在春天的webflux?

时间:2018-01-14 22:24:34

标签: spring project-reactor spring-webflux

我不明白当时的使用和区别,然后是空的,然后很多和flatMapMany在春天webflux上的Flux或Mono。

1 个答案:

答案 0 :(得分:15)

  • flatMap vs flatMapMany

在函数式编程中,flatMap返回的类型与承载方法的类型相同,因此对于Mono<T>flatMap返回Mono。这意味着内部Publisher只能发出一个元素(或者它被截断)。我们通过Mono#flatMap获取Function<T, Mono<R>>来强制执行此操作。

因此,我们需要一个可以发出多个元素的更多任意Publisher的替代方案。因此Mono#flatMapMany(Function<T, Publisher<R>>)会返回Flux<R>

TL; DR:Mono#flatMap用于异步 1对1 转换源Mono中的元素,{{ 1}}用于 1到N异步转换(如Flux#flatMap)。

  • Mono#flatMapManythenthenEmpty

thenMany上的所有thenXXX方法都有一个共同的语义:它们忽略源Mono信号并对完成信号做出反应(onNextonComplete ),在这一点上用各种选项继续顺序。因此,这可以更改返回的onError

的泛型类型
  1. Mono只会重播源终端信号,导致then表示此信号永远不会发出Mono<Void>信号。
  2. onNext不仅返回thenEmpty,还需要Mono<Void>作为参数。它表示源完成信号然后第二个单声道完成信号的串联。换句话说,当A然后B顺序完成并且不发出数据时,它就完成了。
  3. Mono<Void>等待源完成然后播放其thenMany参数中的所有信号,从而导致Publisher<R>“暂停”直到源完成,然后在重播完成信号之前,从提供的发布者中发出许多元素。