我有两个调用 a() 和 b() 并且都返回
Mono<String>
,字符串是具有不同结构的 json。我还有两种方法可以从每个 json 字符串中提取数据。我想将两者合并为一个对象,我们称之为 AA。我开始写的是
val aRes = a()
val bRes = b()
return aRes
.map {
str ->
AA(
aa = extractAAFromARes(str)
bb = extractBBFromBRes(bRes.block()!!)
)
}
.map { body -> ResponseEntity.ok().body(body) }
.toMono()
我在
bb = extractBBFromBRes(bRes.block()!!)
上收到错误
ava.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not
supported in thread reactor-http-epoll-2
如何在不出现阻塞错误的情况下组合这两个调用?
谢谢
es
你不应该阻止反应流。如果您只是想等到两个发布者都解决或
Mono.when(aa, bb)
之类的运算符,而不是使用像 Mono.zip(aa, bb)
这样的运算符,如果您需要下游结果,它会返回 Mono<Tuple2<T1, T2>>
。如果您需要特殊的错误处理,您也可以考虑Mono.zipDelayError
。