首页 > 解决方案 > 使用 2 个嵌套订阅返回 Mono/Flux

问题描述

我需要为一个函数返回 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. 

}

标签: reactive-programmingspring-reactivespring-reactorspring-kotlin

解决方案


您可以使用.cache()来存储 value1 并使用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
    })
}

推荐阅读