Project Reactor 中 doOnComplete() 和 subscribe() 第三个参数的区别

问题描述 投票:0回答:1

我目前正在使用 Project Reactor,遇到了一个场景,我不确定是否使用 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() 和 subscribe() 的第三个参数都在流完成时记录消息。但是,我不确定何时使用其中之一。

提前感谢您的帮助!

java spring spring-webflux project-reactor
1个回答
0
投票

doOnComplete()
subscribe()
的第三个参数都用于在Flux或Mono完成时执行操作,但它们的用例存在一些差异。

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

  2. 订阅回调(

    subscribe()
    的第三个参数): subscribe() 方法的第三个参数是一个回调,当序列完成时调用,无论它完成时有数据还是有错误。 它在 onNext() 和 onError() 回调之后调用。 它适用于整个序列完成后需要采取的操作,无论完成时是否有数据或有错误。

在您的示例中,

doOnComplete()
和 subscribe() 的第三个参数都在流完成时记录消息。如果您想在序列成功完成时专门执行某个操作,可以使用
doOnComplete()
。如果您希望无论成功还是错误都执行某项操作,您可以使用
subscribe()
的第三个参数。

© www.soinside.com 2019 - 2024. All rights reserved.