如何使用 Mono<Boolean> 作为条件来调用第二个方法

Edg*_*ola 5 reactor spring-webflux

我试图以迭代方式检查另一项服务的条件后调用一项服务,如下所示:

if (productService.isProductNotExcluded(product)){
    List<Properties> properties = propertiesService.getProductDetailProperties(product)
...
}
Run Code Online (Sandbox Code Playgroud)

但自从isProductExcluded返回以来Mono<Boolean>,我正在使用这种方法,这看起来很奇怪:

Flux<Properties> properties = productService.isProductNotExcluded(productId)
     .filter(notExcluded -> notExcluded)
     .map(ok-> propertiesService.getProductDetailProperties(product))
     ...
Run Code Online (Sandbox Code Playgroud)

处理这种情况的正确方法是什么?

小智 4

对于返回 a 的谓词Mono<Boolean>,您还可以使用filterWhen将发布者作为谓词。像这样的东西:

Flux<Properties> properties = Mono.just(productId)
.filterWhen(prodId -> productService.isProductNotExcluded(prodId))
.map(validProductId -> propertiesService.getProductDetailProperties(validProductId));   
Run Code Online (Sandbox Code Playgroud)