单声道版的doOnSuccess和doOnNext有区别吗?

时间:2019-05-03 20:51:13

标签: spring project-reactor reactive

假设您有Mono<Integer> someIntegerSource = Mono.just(5),并且想要将其分配给变量。

这些代码段之间是否有区别?

案例1:doOnSuccess

someIntegerSource.doOnSuccess(number -> this.myNumber = number)

案例2:doOnNext

someIntegerSource.doOnNext(number -> this.myNumber = number)

情况3:doOnSuccess +然后(因为我希望分配完成后才能发出单声道)

someIntegerSource.doOnSuccess(number -> this.myNumber = number).then()

1 个答案:

答案 0 :(得分:3)

阅读类Mono的文档并查看图表。他们对行为的解释很清楚。几乎没有明显的差异,但仍然是:

  • Mono::doOnNext在成功发送数据 时触发。
  • Mono::doOnSuccessMono 成功完成成功时触发-结果是Tnull
  • Mono::then作为方法链的结尾,在完成和错误信号上返回Mono<Void>
    • 请注意,此处有效负载已被主动丢弃,这就是为什么Mono<Void>变为Mono<T>的原因。请注意,上述两种方法不会丢弃有效载荷。