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

Amr*_*led 5 spring project-reactor spring-webflux

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

Sim*_*slé 18

  • flatMap VS flatMapMany

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

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

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

  • then,thenEmptythenMany

所有thenXXX方法Mono都有一个共同的语义:它们忽略源onNext信号并对完成信号(onCompleteonError)作出反应,此时用各种选项继续序列.因此,这可以更改返回的泛型类型Mono:

  1. then将只重放源终端信号,导致a Mono<Void>表示从不发出任何信号onNext.
  2. thenEmpty不仅返回a Mono<Void>,而且还需要Mono<Void>一个参数.它代表了源完成信号的级联然后第二,单声道完成信号.换句话说,当A然后B都顺序完成并且不发出数据时,它就完成了.
  3. thenMany等待源完成然后播放来自其Publisher<R>参数的所有信号,从而导致Flux<R>"暂停"直到源完成,然后在重放其完成信号之前从提供的发布者发出许多元素.