Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在一个响应中发送不同类型的多个通量_Kotlin_Spring Webflux_Project Reactor_Reactor - Fatal编程技术网

Kotlin 在一个响应中发送不同类型的多个通量

Kotlin 在一个响应中发送不同类型的多个通量,kotlin,spring-webflux,project-reactor,reactor,Kotlin,Spring Webflux,Project Reactor,Reactor,如果我有这样的代码: data class Response( val a: String, val b: List<String>, val c: Int, ) fun buildResponse(): Response { val a: Mono<String> = getA() val b: Flux<String> = getB() val c: Mono<Int> = getC() return Respo

如果我有这样的代码:

data class Response(
  val a: String,
  val b: List<String>,
  val c: Int,
)

fun buildResponse(): Response {
  val a: Mono<String> = getA()
  val b: Flux<String> = getB()
  val c: Mono<Int> = getC()

  return Response(
    a = a.blockOptional().orElseThrow(),
    b = b.collectList().blockOptional().orElseThrow(),
    c = c.blockOptional().orElseThrow(),
  )
}
数据类响应(
瓦尔:字符串,
val b:列表,
val c:Int,
)
fun buildResponse():响应{
val a:Mono=getA()
valb:Flux=getB()
val c:Mono=getC()
返回响应(
a=a.blockOptional().orelsetrow(),
b=b.collectList().blockOptional().OrelsThrow(),
c=c.blockOptional().orelsetrow(),
)
}

是否有一种方法可以反应性地返回一个
Mono
,而不是阻塞并返回实际的
响应

当然-看看
Mono.zip
操作符,它允许您将多个发布者合并到一个Mono中。基本的
Mono.zip
变体只返回一个元组,但您也可以指定自己的类(
Response
,在本例中),如下所示:

返回Mono.zip(
函数{eles:Array->
响应(元素[0]为字符串,
eles[1]作为列表,
eles[2]as Int)
},
a、 b.集合列表(),c)

您看过
zip
运算符了吗?没有,您能键入一个简短的示例吗?当然,请看我的答案。(kotlin语言标签可能也有助于在此处获得更快的答案。)
return Mono.zip(
        Function { eles: Array<Any> ->
            Response(eles[0] as String,
                    eles[1] as List<String>,
                    eles[2] as Int)
        },
        a, b.collectList(), c)