如果通量为空,则副作用运算符(或类似运算符)
Posted
技术标签:
【中文标题】如果通量为空,则副作用运算符(或类似运算符)【英文标题】:Side effect operator (or a like) in case if empty flux 【发布时间】:2020-04-22 03:38:12 【问题描述】:如果 Flux 为空,我如何调用方法(消费者),例如,如果 Flux 为空,我想记录消息
【问题讨论】:
【参考方案1】:我看到了两种实现方式:
-
使用
switchIfEmpty()
那么您的代码 sn-p 将具有以下表示:
.switchIfEmpty(Flux.empty().doOnComplete(() -> log.info("there were no elements")))
-
另一个选项是
hasElements()
。
尝试将代码 sn-p 放在链的末尾某处:
.hasElements()
.doOnNext(hasElements ->
if (!hasElements)
log.info("there were no elements");
)
【讨论】:
【参考方案2】:这个是为你准备的:
/**
* Add behavior (side-effect) triggered when the @link Flux completes successfully.
* <p>
* <img class="marble" src="doc-files/marbles/doOnComplete.svg" >
*
* @param onComplete the callback to call on @link Subscriber#onComplete
*
* @return an observed @link Flux
*/
public final Flux<T> doOnComplete(Runnable onComplete)
查看此 JavaDocs:
/**
* Represents an empty publisher which only calls onSubscribe and onComplete.
* <p>
* This Publisher is effectively stateless and only a single instance exists.
* Use the @link #instance() method to obtain a properly type-parametrized view of it.
* @see <a href="https://github.com/reactor/reactive-streams-commons">Reactive-Streams-Commons</a>
*/
final class FluxEmpty extends Flux<Object>
【讨论】:
即使流中有元素,很可能会调用doOnComplete()
方法。我认为问题只是在Flux
为空的情况下记录。以上是关于如果通量为空,则副作用运算符(或类似运算符)的主要内容,如果未能解决你的问题,请参考以下文章
IF 语句中的 jQuery OR 运算符检查任一文本字段是不是为空
如果我理解正确:C# 等式运算符 ( == ) 和操作数的顺序