web-dev-qa-db-fra.com

Qu'est-ce donc, puis Vide, puis Beaucoup et FlatMapMany dans le webflux de printemps?

Je ne comprends pas l'utilisation et la différence entre alors, thenEmpty, thenMany et flatMapMany sur Flux ou Mono dans le printemps webflux .

10
Amr Khaled
  • 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é:

  1. then rejouera simplement le signal du terminal source, résultant en un Mono<Void> pour indiquer que cela ne signale jamais onNext.
  2. 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.
  3. 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.
24
Simon Baslé