我目前正在使用Project Reader,我遇到了一个场景,我不确定是使用doOnComplete()还是使用Subscribe()的第三个参数.两者似乎都是在发布者发出完成信号时调用的,但我怀疑它们之间存在一些差异.

下面是我正在使用的代码示例:

Flux.range(1, 10)
    .doOnComplete(() -> log.info("[Complete]"))
    .subscribe(
        data -> log.info("[data] : {}", data),
        error -> log.info("[error] : {}", error.getMessage()),
        () -> log.info("[Subscribe Complete]")
    );

在这段代码中,doOnComplete()和订阅()的第三个参数都在流完成时记录一条消息.然而,我不确定什么时候使用一个而不是另一个.

提前感谢您的帮助!

推荐答案

doOnComplete()subscribe()的第三个参数都用于在Flux或Mono完成时执行操作,但它们的用例有一些不同.

  1. doOnComplete(): DoOnComplete()是一个运算符,它允许您在序列成功完成(即没有错误)时执行副作用(操作). 它不会影响终止信号本身;它纯粹是为了副作用. 它通常用于日志(log)记录、资源清理或在Flux或Mono成功完成时要执行的任何其他操作.

  2. 订阅回调(subscribe()的第三个参数): SUBSCRIBE()方法的第三个参数是在序列完成时调用的回调,whether it completes with data or with an error. 它在onNext()和onError()回调之后调用. 它适用于在整个序列完成后需要执行的操作,无论它是带数据还是带错误完成的.

在您的示例中,当流完成时,订阅()的doOnComplete()和第三个参数都在记录消息.如果要在序列成功完成时执行特定的操作,可以使用doOnComplete().如果您希望无论成功还是错误都执行操作,则可以使用subscribe()的第三个参数.

Java相关问答推荐

Saxon 9:如何从Java扩展函数中的net.sf.saxon.expr. XPathContent中获取声明的变量

在Java中将Charsequence数组更改为String数组或List String<>

流迭代列表<;对象>;上的NoSuchElementException

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

把一条整型短裤和两条短裤装成一条长的

生成桥方法以解决具有相同擦除的冲突方法

@Rollback @ Transmission在验收测试中不工作

使用多个RemoteDatabase对象的一个线程

在Eclipse中调试未导出的JDK模块的Java包

如何在Cosmos DB(Java SDK)中增加默认响应大小

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

Groovy/Java:匹配带引号的命令选项

Java SSLKeyManager出厂密码

如何在太阳系模拟器中添加月球?

Spring Boot中的应用程序.properties文件中未使用的属性

Spring动态反序列化JSON可以是列表,也可以只是一个对象

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

将@Transactional添加到Spring框架中链下的每个方法会产生什么效果?

带有提取器的JavaFXObservableList会根据侦听器的存在而改变行为