我不明白当时的使用和区别,然后是空的,然后很多和flatMapMany在春天webflux上的Flux或Mono。
答案 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#flatMapMany
,then
和thenEmpty
thenMany
上的所有thenXXX
方法都有一个共同的语义:它们忽略源Mono
信号并对完成信号做出反应(onNext
和onComplete
),在这一点上用各种选项继续顺序。因此,这可以更改返回的onError
:
Mono
只会重播源终端信号,导致then
表示此信号永远不会发出Mono<Void>
信号。onNext
不仅返回thenEmpty
,还需要Mono<Void>
作为参数。它表示源完成信号然后第二个空单声道完成信号的串联。换句话说,当A然后B顺序完成并且不发出数据时,它就完成了。Mono<Void>
等待源完成然后播放其thenMany
参数中的所有信号,从而导致Publisher<R>
“暂停”直到源完成,然后在重播完成信号之前,从提供的发布者中发出许多元素。