вернуть Mono / Flux с 2 вложенными подписками
Мне нужно вернуть Mono / Flux для функции, но у нее есть 2 вложенные подписки. Я ищу лучшее решение для публикации Mono / Flux только после того, как будут доступны эти 2 значения подписки, а затем выполнить некоторую операцию для получения finalValue.
Последняя цель: подписчики функции getFinalValue() должны иметь возможность подписаться на окончательное значение. Мне тоже нужен Flux. Каким должен быть лучший подход для этого?
fun <T> getFinalValue(): Mono<T> {
object1.getValue1().subscribe { value1 ->
object2.getValue2(value1.id).subscribe{ value2 ->
// perform some operation with value 1 and 2
// derieve finalValue
}
}
return //I need to return Mono<T> which should publish finalValue to the subscribers of this function.
}
2 ответа
Решение
Ты можешь использовать .cache()
сохранить значение1 и двигаться вперед с Mono.zip
. Затем вzip
flatMap
у вас есть кортеж с value1
а также value2
fun <T> getFinalValue(): Mono<T> {
val value1 = object1.getValue1().cache();
val value2 = object1.getValue1().flatMap(value -> object2.getValue2(value));
return Mono.zip(value1, value2)
.flatMap(tuple -> {
// logic with tuple.T1 and tuple.T2
})
}
Вы хотели, чтобы это понравилось?
fun <T> getFinalValue(): Mono<T> {
return object1.getValue1()
.flatMap { value1 ->
object2.getValue2(value1.id)
.map { value2 ->
// perform some operation with value 1 and 2
// derieve finalValue
}
}
}