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

Difference between doOnSuccess and doOnEach, and in which use case i should use each of them

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

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

进入

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

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

那么 doOnSuccess 和 doOnEach 有什么区别,我应该在什么情况下使用它们?

顾名思义,

doOnSuccess 只会在您的 observable returns 项成功时调用,并且不会引发错误。因此,您只会记录确认回复。

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


doOnEach 将被调用,无论 observable 是否发出一个项目,错误与否。它接收通知而不是项目本身。它将被称为:

  • 单机的 onSuccess 和 onError
  • 典型 Observable 的 onNext、onComplete 和 onError

Observable 项目很可能从 Single 变为 Observable。此外,还需要能够记录错误和成功,这就是未选择 doOnNext 的原因。