Смешивание двух моно и возврат первого со вторым в первом корпусе

#reactive-programming #spring-webflux #project-reactor

Вопрос:

Я сталкиваюсь с ситуацией, когда мне приходится использовать 2 Моно, где второй будет зависеть от поля идентификатора первого и возвращать ответ второго в теле первого Моно.

Например :

 Mono<Article> first = fetchArticleById(id);

Mono<Rating> second = fetchRating(article.getRatingId()); //here I will use the response from 
first Mono,
 

затем верните результат в виде

 /* this is the response of first Mono, the rating field is set by second Mono */
Article {
"id":1234,
"text" : "some text",
"rating" : "5 star", //fetched from second Mono
"ratingId":qq11
}
 

Я пытался

 first.map(art -> {
 return fetchRating(art.getRatingId());
});
 

Но вот так я могу вернуть ответ только второго Моно.

Попробовав Map или Flatmap, он работает только на втором моно.

Пожалуйста, предложите.

Ответ №1:

 fetchArticleById(id)
  .flatMap(art -> fetchRating(art.getRatingId())
    .map(rating -> new Pair(art, rating))); 
 

В этой map функции у вас есть доступ как к статье, так и к рейтингу, поэтому вы подключаете их по мере необходимости.

Комментарии:

1. Вы можете использовать Tuple#of