如果通量为空,则副作用运算符(或类似运算符)

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为空的情况下记录。

以上是关于如果通量为空,则副作用运算符(或类似运算符)的主要内容,如果未能解决你的问题,请参考以下文章

如果变量 image 为空,则定义默认图像

IF 语句中的 jQuery OR 运算符检查任一文本字段是不是为空

如果我理解正确:C# 等式运算符 ( == ) 和操作数的顺序

为啥当 == 为空值返回 true 时 >= 返回 false?

SQL 与,或,非

如果条件不起作用,则 ASP Classic VB