Spring的web流中then、thenEmpty、thenMany和flatMapMany是什么?

mwngjboj  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(444)

我不明白spring webflux中FluxMono上的thenEmptythenManyflatMapMany的用法和区别。

5jdjgkvh

5jdjgkvh1#

*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;医生:Mono#flatMap用于异步1到1转换的源Mono中的元素,Mono#flatMapMany用于1到N异步转换(如Flux#flatMap)。

*thenthenEmptythenMany

Mono上的所有thenXXX方法都有一个共同的语义:它们忽略源onNext信号,并对完成信号(onCompleteonError)做出React,在这一点上继续使用各种选项。因此,这可能会更改返回的Mono的泛型类型:

  1. then只会重放源端信号,结果是Mono<Void>,表明它从不发送任何onNext信号。
  2. thenEmpty不仅返回一个Mono<Void>,而且它接受一个Mono<Void>作为参数。它表示源完成信号 * 然后 * 第二个,* 空 * Mono完成信号的串联。换句话说,当A然后B都顺序完成时,它完成,并且不发出数据。
  3. thenMany等待源完成,然后播放来自其Publisher<R>参数的所有信号,导致Flux<R>将“暂停”,直到源完成,* 然后 * 从提供的发布者发出 * 许多 * 元素,然后重新播放其完成信号。
ljo96ir5

ljo96ir52#

在Spring WebFlux中使用Flux或Mono:
然后:执行一个操作,并在前一个操作完成时继续,不返回任何值。thenEmpty:执行一个操作,并返回空的Mono/Flux。thenMany:执行一个操作,并继续给定的Flux序列。flatMapMany:将源Mono/Flux发出的每个元素投影到发布器中,允许异步操作和将结果合并到单个Flux中。本质上:
then用于继续而不返回值。thenEmpty用于执行一个动作并返回一个空的Mono/Flux。thenMany继续一个新的Flux序列。flatMapMany将元素转换为发布者,允许异步处理并将结果合并到一个Flux流中。

相关问题