return Mono/Flux 有 2 个嵌套订阅
return Mono/Flux with 2 nested subscriptions
我需要 return Mono / Flux 的功能,但这有 2 个嵌套订阅。我正在寻找一个更好的解决方案,仅在这 2 个订阅值可用后才发布 Mono/Flux,然后执行一些操作以获取最终值。
最后的 Objective 是,函数 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.
}
有没有喜欢的?
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
}
}
}
你可以用.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
})
}
我需要 return Mono / Flux 的功能,但这有 2 个嵌套订阅。我正在寻找一个更好的解决方案,仅在这 2 个订阅值可用后才发布 Mono/Flux,然后执行一些操作以获取最终值。
最后的 Objective 是,函数 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.
}
有没有喜欢的?
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
}
}
}
你可以用.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
})
}