Je ne comprends pas l'utilisation et la différence entre alors, thenEmpty
, thenMany
et flatMapMany
sur Flux
ou Mono
dans le printemps webflux .
flatMap
vs flatMapMany
En programmation fonctionnelle, flatMap
renvoie le même type que le type qui porte la méthode, donc pour Mono<T>
, flatMap
renvoie un Mono
. Ce qui signifie qu'un seul élément peut être émis par le Publisher
intérieur (ou qu'il est tronqué). Nous l'avons appliqué en demandant à Mono#flatMap
De prendre un Function<T, Mono<R>>
.
Par conséquent, nous avions besoin d'une alternative pour des Publisher
plus arbitraires qui pourraient émettre plus d'un élément. D'où Mono#flatMapMany(Function<T, Publisher<R>>)
qui renvoie un Flux<R>
.
TL; DR: Mono#flatMap
Est pour asynchrone mais 1-to-1 transformation de l'élément dans la source Mono
, Mono#flatMapMany
Est pour la transformation asynchrone 1 vers N (comme Flux # flatMap).
then
, thenEmpty
et thenMany
Toutes les méthodes thenXXX
sur Mono
ont une sémantique en commun: elles ignorent les signaux source onNext
et réagissent sur les signaux d'achèvement (onComplete
et onError
), poursuivant la séquence à ce stade avec diverses options. En conséquence, cela peut changer le type générique du Mono
retourné:
then
rejouera simplement le signal du terminal source, résultant en un Mono<Void>
pour indiquer que cela ne signale jamais onNext
.thenEmpty
renvoie non seulement un Mono<Void>
, mais il prend un Mono<Void>
comme paramètre. Il représente une concaténation du signal d'achèvement de la source puis la seconde, vide Signal d'achèvement mono. En d'autres termes, il se termine lorsque A puis B se sont achevés de manière séquentielle et n'émettent pas de données.thenMany
attend que la source se termine, puis lit tous les signaux de son paramètre Publisher<R>
, ce qui donne un Flux<R>
qui "s'arrêtera" jusqu'à ce que la source se termine, puis émettez les nombreux éléments de l'éditeur fourni avant de rejouer son signal d'achèvement également.