如何使用 Mono<Boolean> 作为调用第二种方法的条件
How can I use Mono<Boolean> as condition to call second method
我在检查另一项服务的条件后尝试调用一项服务
以迭代的方式,我可以做到这一点
if (productService.isProductNotExcluded(product)){
List<Properties> properties = propertiesService.getProductDetailProperties(product)
...
}
但由于 isProductExcluded 正在返回 Mono<Boolean>
我正在采用这种看起来很奇怪的方法。
Flux<Properties> properties = productService.isProductNotExcluded(productId)
.filter(notExcluded -> notExcluded)
.map(ok-> propertiesService.getProductDetailProperties(product))
...
解决这种情况的正确方法是什么?
你所做的并不奇怪,我个人不会 return 反应函数中的布尔值 Mono<Boolean>
如果我可以避免它,但这并没有错,有时你没有一个选择。
为了清楚起见,我个人会在地图中加入 if else 语句。我会更改函数的名称,并重写 isNot
部分。
Flux<Properties> properties = productService.isExcluded(productId)
.flatMap(isExcluded -> {
if(!isExcluded)
return propertiesService.getProductDetailProperties(product);
else
return mono.empty();
});
这是个人观点和编码品味的问题,但我发现这更具可读性,因为您可以阅读代码并立即理解它。但这是个人品味。
对于 returns 和 Mono<Boolean>
的谓词,您还可以使用 filterWhen
将发布者作为谓词。像这样:
Flux<Properties> properties = Mono.just(productId)
.filterWhen(prodId -> productService.isProductNotExcluded(prodId))
.map(validProductId -> propertiesService.getProductDetailProperties(validProductId));
可以使用all()运算符。
根据文档。 all() 发出一个 boolean true if all values of this sequence match
Mono all(Predicate<? super T> predicate) {}
我在检查另一项服务的条件后尝试调用一项服务
以迭代的方式,我可以做到这一点
if (productService.isProductNotExcluded(product)){
List<Properties> properties = propertiesService.getProductDetailProperties(product)
...
}
但由于 isProductExcluded 正在返回 Mono<Boolean>
我正在采用这种看起来很奇怪的方法。
Flux<Properties> properties = productService.isProductNotExcluded(productId)
.filter(notExcluded -> notExcluded)
.map(ok-> propertiesService.getProductDetailProperties(product))
...
解决这种情况的正确方法是什么?
你所做的并不奇怪,我个人不会 return 反应函数中的布尔值 Mono<Boolean>
如果我可以避免它,但这并没有错,有时你没有一个选择。
为了清楚起见,我个人会在地图中加入 if else 语句。我会更改函数的名称,并重写 isNot
部分。
Flux<Properties> properties = productService.isExcluded(productId)
.flatMap(isExcluded -> {
if(!isExcluded)
return propertiesService.getProductDetailProperties(product);
else
return mono.empty();
});
这是个人观点和编码品味的问题,但我发现这更具可读性,因为您可以阅读代码并立即理解它。但这是个人品味。
对于 returns 和 Mono<Boolean>
的谓词,您还可以使用 filterWhen
将发布者作为谓词。像这样:
Flux<Properties> properties = Mono.just(productId)
.filterWhen(prodId -> productService.isProductNotExcluded(prodId))
.map(validProductId -> propertiesService.getProductDetailProperties(validProductId));
可以使用all()运算符。
根据文档。 all() 发出一个 boolean true if all values of this sequence match
Mono all(Predicate<? super T> predicate) {}