doOnSuccess和doOnEach之间的区别,在哪种用例中我应该使用它们中的每一个

时间:2019-06-25 13:21:55

标签: java spring java-8 rx-java flux

我正在查看源代码文件,发现在某些提交中我们更改了

的用法
    .doOnSuccess(response -> logBodyAsJSON(response ));

进入

    .doOnEach(response -> logBodyAsJSON(response ));

我找不到这样做的明确理由。

那么doOnSuccess和doOnEach有什么区别,在哪种用例中我应该分别使用它们?

1 个答案:

答案 0 :(得分:2)

顾名思义,

String#matches仅在可观察对象成功返回项目且不会引发错误时才调用。因此,您将仅记录确认响应。

此外,doOnSuccess适用于Singles或Maybes,它们只能发出单个项目(否则,您将使用doOnNext)。如果使用可发射多个项目的Observable,则将使用doOnSuccess来具有完全相同的行为。


doOnNext将被调用,无论可观察对象是否发出项目,是否发出错误。它收到通知,而不是项目本身。它将被称为:

  • onSuccess和onError单个
  • onNext,onComplete和onError典型的可观察结果

enter image description here

可观察项很有可能从单一变为可观察。另外,还需要能够记录错误以及成功,这就是为什么未选择doOnEach的原因。