我不明白spring webflux中Flux或Mono上的thenEmpty、thenMany和flatMapMany的用法和区别。
Flux
Mono
thenEmpty
thenMany
flatMapMany
5jdjgkvh1#
*flatMap vs flatMapMany
flatMap
在函数式编程中,flatMap返回的类型与承载该方法的类型相同,因此对于Mono<T>,flatMap返回Mono。这意味着内部Publisher只能发出一个元素(或者它被截断)。我们通过让Mono#flatMap接受Function<T, Mono<R>>来强制执行。因此,我们需要一个更任意的Publisher的替代方案,它可以发出多个元素。因此,Mono#flatMapMany(Function<T, Publisher<R>>)返回Flux<R>。TL;医生:Mono#flatMap用于异步但1到1转换的源Mono中的元素,Mono#flatMapMany用于1到N异步转换(如Flux#flatMap)。
Mono<T>
Publisher
Mono#flatMap
Function<T, Mono<R>>
Mono#flatMapMany(Function<T, Publisher<R>>)
Flux<R>
Mono#flatMapMany
*then、thenEmpty和thenMany
then
Mono上的所有thenXXX方法都有一个共同的语义:它们忽略源onNext信号,并对完成信号(onComplete和onError)做出React,在这一点上继续使用各种选项。因此,这可能会更改返回的Mono的泛型类型:
thenXXX
onNext
onComplete
onError
Mono<Void>
Publisher<R>
ljo96ir52#
在Spring WebFlux中使用Flux或Mono:然后:执行一个操作,并在前一个操作完成时继续,不返回任何值。thenEmpty:执行一个操作,并返回空的Mono/Flux。thenMany:执行一个操作,并继续给定的Flux序列。flatMapMany:将源Mono/Flux发出的每个元素投影到发布器中,允许异步操作和将结果合并到单个Flux中。本质上:then用于继续而不返回值。thenEmpty用于执行一个动作并返回一个空的Mono/Flux。thenMany继续一个新的Flux序列。flatMapMany将元素转换为发布者,允许异步处理并将结果合并到一个Flux流中。
2条答案
按热度按时间5jdjgkvh1#
*
flatMap
vsflatMapMany
在函数式编程中,
flatMap
返回的类型与承载该方法的类型相同,因此对于Mono<T>
,flatMap
返回Mono
。这意味着内部Publisher
只能发出一个元素(或者它被截断)。我们通过让Mono#flatMap
接受Function<T, Mono<R>>
来强制执行。因此,我们需要一个更任意的
Publisher
的替代方案,它可以发出多个元素。因此,Mono#flatMapMany(Function<T, Publisher<R>>)
返回Flux<R>
。TL;医生:
Mono#flatMap
用于异步但1到1转换的源Mono
中的元素,Mono#flatMapMany
用于1到N异步转换(如Flux#flatMap)。*
then
、thenEmpty
和thenMany
Mono
上的所有thenXXX
方法都有一个共同的语义:它们忽略源onNext
信号,并对完成信号(onComplete
和onError
)做出React,在这一点上继续使用各种选项。因此,这可能会更改返回的Mono
的泛型类型:then
只会重放源端信号,结果是Mono<Void>
,表明它从不发送任何onNext
信号。thenEmpty
不仅返回一个Mono<Void>
,而且它接受一个Mono<Void>
作为参数。它表示源完成信号 * 然后 * 第二个,* 空 * Mono完成信号的串联。换句话说,当A然后B都顺序完成时,它完成,并且不发出数据。thenMany
等待源完成,然后播放来自其Publisher<R>
参数的所有信号,导致Flux<R>
将“暂停”,直到源完成,* 然后 * 从提供的发布者发出 * 许多 * 元素,然后重新播放其完成信号。ljo96ir52#
在Spring WebFlux中使用Flux或Mono:
然后:执行一个操作,并在前一个操作完成时继续,不返回任何值。thenEmpty:执行一个操作,并返回空的Mono/Flux。thenMany:执行一个操作,并继续给定的Flux序列。flatMapMany:将源Mono/Flux发出的每个元素投影到发布器中,允许异步操作和将结果合并到单个Flux中。本质上:
then用于继续而不返回值。thenEmpty用于执行一个动作并返回一个空的Mono/Flux。thenMany继续一个新的Flux序列。flatMapMany将元素转换为发布者,允许异步处理并将结果合并到一个Flux流中。