如何使用 Mutiny(Uni's)链接 API 调用响应

问题描述 投票:0回答:1

我有 3 个反应式休息客户端功能

getOne(): Uni<String>,  getTwo(reponseFromOne): Uni<List<Two>>,  getThree(responsesFromTwo): Uni<List<Three>>

我想链接它们,以便将 getOne 的结果作为参数传递给 getTwo,并将 getTwo 的结果作为参数传递给 getThree。这样我就可以在所有调用都通过后构造对象

类似于..以下伪代码..

val someObjects: Uni<List<SomeObject> =
    getOne().onItem().transformToUni { input -> getTwo(input) }
        .onItem().transformToUni { input2 -> getThree(input2) }
        .map {
            SomeObject(getTwo.something, getThree.something)
        }
reactive mutiny smallrye smallrye-reactive-messaging
1个回答
0
投票

尼克,你好! 您可以使用 flatMap 链接此类函数。我尝试以单元测试的格式实现您的示例。

@Test
void chainTest() {
    var someObject = getOne()
            .flatMap(input1 -> getTwo(input1)
                    .flatMap(input2array -> Multi.createFrom().iterable(input2array)
                            .onItem().transformToUniAndConcatenate(input2 -> getThree(input2)
                                    .map(input3 -> new SomeObject(input1, input2, input3)))
                            .collect().asList()
                    ))
            .await().indefinitely();
}
© www.soinside.com 2019 - 2024. All rights reserved.