如何将两个 webclient mono 调用合并为一个 mono<ResponseEntity<>> call

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

我有两个调用 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

kotlin spring-webflux project-reactor spring-webclient
1个回答
2
投票

你不应该阻止反应流。如果您只是想等到两个发布者都解决或

Mono.when(aa, bb)
之类的运算符,而不是使用像
Mono.zip(aa, bb)
这样的运算符,如果您需要下游结果,它会返回
Mono<Tuple2<T1, T2>>
。如果您需要特殊的错误处理,您也可以考虑
Mono.zipDelayError

© www.soinside.com 2019 - 2024. All rights reserved.