#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