繁体   English   中英

过滤多个条件 - reactor Flux/Mono filterWhen()

[英]Filter multiple condition - reactor Flux/Mono filterWhen()

我正在使用 Mono 的filterWhen()和如下多个条件,但不知道如何实现正确的方法。

Mono.just("a").filterWhen(item -> conditionA && conditionB)...
// or Mono.just("a").filterWhen(item -> conditionA || conditionB)...

// both is reactive call
Mono<Boolean> conditionA(String a) {
     return webClient.call(....).map(Boolean);//sample return Boolean here}
Mono<Boolean> conditionB(String a) {
     return webClient.call(....).map(Boolean);//sample return Boolean here}

当使用conditionA && conditionB 时,是否在conditionA(或conditionB)返回false 时立即返回?

也当使用 conditionA || 条件B,当条件A(或条件B)返回true时是否立即返回?

运算符Flux#allFlux#any正是您要寻找的。

首先,将响应合并到一个Flux of Boolean并使用Flux#all来发出一个布尔值 true 如果所有响应都被评估为 true:

Flux.merge(conditionA(), conditionB()).all(condition -> condition)

以这种方式,如果conditionAfalsefalse被发射,而无需等待contitionB进行评估。

作为旁注, Flux.merge急切地订阅发布者(所有发布者一起订阅)。 如果您想按顺序执行条件,请改用Flux.concat

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM