第一个Mono完成后调用Mono并返回第一个Mono的结果

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

我想在 Webflux 环境中执行两个业务操作,第二个操作仅在第一个操作成功后才发生。第二个操作完成后,我想返回第一个操作的结果。第二个操作调用 org.springframework.web.reactive.function.client.WebClient。这是我到目前为止所尝试过的:

public Mono<ResponseEntity<Resource>> callOperations(){
   return service.operation1()
          .flatMap(resource -> {
                   service.operation2();
                   return resource;
           })
          .map(ResponseEntity::ok);

}

我也尝试使用 then 和 subscribe 但我无法让 webclient 执行调用并返回 service.operation1 的结果。我必须做什么?

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

您需要使用反应式运算符构建一个流,并让 WebFlux 订阅它。在您的代码片段中没有订阅

service.operation2()

public Mono<ResponseEntity<Resource>> callOperations(){
   return service.operation1()
          .flatMap(resource -> {
                   return service.operation2()
                       .thenReturn(resource);
           })
          ...

}

0
投票

正确的习惯用法是调用 Mono.delayUntil():

enter image description here

您的代码就很简单:

public Mono<ResponseEntity<Resource>> callOperations(){
   return service.operation1()
          .delayUntil(service.operation2())
          ...
}
© www.soinside.com 2019 - 2024. All rights reserved.