вернуть Mono / Flux с 2 вложенными подписками - PullRequest
0 голосов
/ 09 мая 2020

Мне нужно вернуть Mono / Flux для функции, но у нее есть 2 вложенных подписки. Я ищу лучшее решение для publi sh 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 ]

1 голос
/ 10 мая 2020

Вы можете использовать .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
    })
}
1 голос
/ 10 мая 2020

Вы хотели сделать это?

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

...