我目前正在使用 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() 的第三个参数都在流完成时记录消息。但是,我不确定何时使用其中之一。
提前感谢您的帮助!
doOnComplete()
和subscribe()
的第三个参数都用于在Flux或Mono完成时执行操作,但它们的用例存在一些差异。
doOnComplete()
:
doOnComplete() 是一个运算符,允许您在序列成功完成(即没有错误)时执行副作用(操作)。
它不影响终止信号本身;纯粹是为了副作用。
它通常用于日志记录、资源清理或 Flux 或 Mono 成功完成时要执行的任何其他操作。
订阅回调(
subscribe()
的第三个参数):
subscribe() 方法的第三个参数是一个回调,当序列完成时调用,无论它完成时有数据还是有错误。
它在 onNext() 和 onError() 回调之后调用。
它适用于整个序列完成后需要采取的操作,无论完成时是否有数据或有错误。
在您的示例中,
doOnComplete()
和 subscribe() 的第三个参数都在流完成时记录消息。如果您想在序列成功完成时专门执行某个操作,可以使用 doOnComplete()
。如果您希望无论成功还是错误都执行某项操作,您可以使用 subscribe()
的第三个参数。