春のwebfluxでのthenEmpty
またはthenMany
の使用、およびflatMapMany
、Flux
とMono
の違いがわかりません。
flatMap
vs flatMapMany
関数型プログラミングでは、flatMap
はメソッドを持つ型と同じ型を返すため、_Mono<T>
_の場合、flatMap
はMono
を返します。つまり、内側のPublisher
からは1つの要素のみを出力できます(または切り捨てられます)。 _Mono#flatMap
_が_Function<T, Mono<R>>
_を取得するように強制しました。
結果として、複数の要素を放出する可能性のある、より恣意的なPublisher
の代替が必要でした。したがって、Mono#flatMapMany(Function<T, Publisher<R>>)
は_Flux<R>
_を返します。
TL; DR:_Mono#flatMap
_はasynchronousですが、1-to-1ソース内の要素の変換Mono
、_Mono#flatMapMany
_は1-to-N非同期変換用です(Flux#flatMapなど)。
then
、thenEmpty
およびthenMany
thenXXX
のすべてのMono
メソッドには共通のセマンティクスが1つあります。これらは、ソースonNext
シグナルを無視し、完了シグナル(onComplete
およびonError
)、さまざまなオプションを使用してこの時点でシーケンスを続行します。結果として、これは返されるMono
のジェネリック型を変更する可能性があります:
then
はソースターミナル信号を再生するだけで、_Mono<Void>
_がonNext
を通知しないことを示します。thenEmpty
は、_Mono<Void>
_を返すだけでなく、_Mono<Void>
_をパラメーターとして受け取ります。これは、ソース完了信号、次に、2番目のemptyモノ完了信号の連結を表します。つまり、AとBの両方が順番に完了したときに完了し、データを送信しません。thenMany
は、ソースが完了するまで待機してから、その_Publisher<R>
_パラメーターからのすべての信号を再生し、ソースが完了するまで「一時停止」する_Flux<R>
_を生成しますthen完了シグナルも再生する前に、提供されたパブリッシャーからmany要素を発行します。