spring webflux 中的 then、thenEmpty、thenMany 和 flatMapMany 是什么?
What is then, thenEmpty, thenMany and flatMapMany in spring webflux?
我不明白 Flux
上的 thenEmpty
、thenMany
和 flatMapMany
或 [= 中的 Mono
的用法和区别18=] 网络通量。
flatMap
对比 flatMapMany
在函数式编程中,flatMap
returns与承载方法的类型相同,所以对于Mono<T>
,flatMap
returns一个Mono
。这意味着内部 Publisher
只能发出一个元素(或者它被截断)。我们通过让 Mono#flatMap
采取 Function<T, Mono<R>>
.
来强制执行
因此,我们需要一种更随意的替代方案 Publisher
,它可以发射多个元素。因此 Mono#flatMapMany(Function<T, Publisher<R>>)
其中 returns 一个 Flux<R>
.
TL;DR:Mono#flatMap
用于 异步 但 1 对 1 源中元素的转换Mono
、Mono#flatMapMany
用于 1 对 N 异步 转换(如 Flux#flatMap)。
then
、thenEmpty
和 thenMany
Mono
上的所有 thenXXX
方法都有一个共同的语义:它们忽略源 onNext
信号并对完成信号(onComplete
和 onError
),此时使用各种选项继续序列。因此,这可以更改返回的通用类型 Mono
:
then
将只重播源终端信号,导致 Mono<Void>
表明这从不发出任何信号 onNext
.
thenEmpty
不仅是returns一个Mono<Void>
,它还需要一个Mono<Void>
作为参数。它表示源完成信号 then 第二个 empty Mono 完成信号的串联。换句话说,当 A 然后 B 都按顺序完成并且不发出数据时,它就完成了。
thenMany
等待源完成然后播放来自其 Publisher<R>
参数的所有信号,导致 Flux<R>
将 "pause" 直到源完成, then 在重播其完成信号之前从提供的发布者发出 many 元素。
我不明白 Flux
上的 thenEmpty
、thenMany
和 flatMapMany
或 [= 中的 Mono
的用法和区别18=] 网络通量。
flatMap
对比flatMapMany
在函数式编程中,flatMap
returns与承载方法的类型相同,所以对于Mono<T>
,flatMap
returns一个Mono
。这意味着内部 Publisher
只能发出一个元素(或者它被截断)。我们通过让 Mono#flatMap
采取 Function<T, Mono<R>>
.
因此,我们需要一种更随意的替代方案 Publisher
,它可以发射多个元素。因此 Mono#flatMapMany(Function<T, Publisher<R>>)
其中 returns 一个 Flux<R>
.
TL;DR:Mono#flatMap
用于 异步 但 1 对 1 源中元素的转换Mono
、Mono#flatMapMany
用于 1 对 N 异步 转换(如 Flux#flatMap)。
then
、thenEmpty
和thenMany
Mono
上的所有 thenXXX
方法都有一个共同的语义:它们忽略源 onNext
信号并对完成信号(onComplete
和 onError
),此时使用各种选项继续序列。因此,这可以更改返回的通用类型 Mono
:
then
将只重播源终端信号,导致Mono<Void>
表明这从不发出任何信号onNext
.thenEmpty
不仅是returns一个Mono<Void>
,它还需要一个Mono<Void>
作为参数。它表示源完成信号 then 第二个 empty Mono 完成信号的串联。换句话说,当 A 然后 B 都按顺序完成并且不发出数据时,它就完成了。thenMany
等待源完成然后播放来自其Publisher<R>
参数的所有信号,导致Flux<R>
将 "pause" 直到源完成, then 在重播其完成信号之前从提供的发布者发出 many 元素。