doOnSuccess和doOnEach之间的区别,以及在哪些情况下应该使用它们中的每一个。

3

我正在审核一个源代码文件,在某个提交中发现我们更改了使用方式

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

进入

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

我找不到明确的理由去做那件事。

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


https://dev59.com/zl4b5IYBdhLWcg3wvkA- - Julio Arboleda
@JulioArboleda,那个问题讨论了其他事情。 - Melad Basilius
1个回答

3
doOnSuccess会在你的Observable成功返回一个项且不引发错误时被调用,正如其名称所示。因此,您只会记录确认响应。
此外,doOnSuccess适用于Single或Maybe,它们只能发出单个项目(否则将使用doOnNext)。如果您使用可以发出多个项的Observable,则使用doOnNext来具有完全相同的行为。
doOnEach无论observable发出项、错误与否都将被调用。它接收一个通知而不是项本身。它将被调用:
  • 对于Single,在onSuccess和onError时
  • 对于典型的Observable,在onNext、onComplete和onError时
enter image description here 很可能observable的项从Single变为了Observable。此外,需要能够同时记录错误和成功,这就是为什么没有选择doOnNext的原因。

那么,doOnEach会在onNext、onComplete、onSuccess和onError的情况下被调用吗? - Melad Basilius
1
没错!但是请注意,Single只有onSuccess和onError(没有onNext和onComplete),而典型的Observable有onNext、onComplete和onError(没有onSuccess)。 - Docteur
1
你觉得我应该在我的回答中加入这个信息吗,@MeladBasilius? - Docteur
是的,您可以将此信息添加到您的答案中。 - Melad Basilius
1
@MeladBasilius 好的!顺便提醒一下,如果这个回答解决了你的问题,请记得接受它。 - Docteur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接