返回带有2个嵌套订阅的Mono / Flux

时间:2020-05-09 11:51:31

标签: reactive-programming spring-reactive spring-reactor spring-kotlin

我需要为函数返回Mono / Flux,但这有2个嵌套订阅。我正在寻找一个更好的解决方案,仅在此2个订阅值可用之后才发布Mono / Flux,然后执行一些操作以获取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 个答案:

答案 0 :(得分:1)

您想要喜欢吗?

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
                }
        }
}

答案 1 :(得分:1)

您可以使用.cache()存储value1并使用Mono.zip向前移动。 然后在zip flatMap中,您有一个value1value2

元组
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
    })
}