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

Posted

技术标签:

【中文标题】doOnSuccess 和 doOnEach 之间的区别,以及在哪个用例中我应该使用它们中的每一个【英文标题】:Difference between doOnSuccess and doOnEach, and in which use case i should use each of them 【发布时间】:2019-11-07 08:29:01 【问题描述】:

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

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

进入

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

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

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

【问题讨论】:

***.com/questions/28723341/… @JulioArboleda,这个问题讨论了别的事情 【参考方案1】:

doOnSuccess 顾名思义,只会在您的 observable 成功返回项目时调用,并且不会引发错误。因此,您只会记录确认响应。

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


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

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

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

【讨论】:

那么,在 onNext、onComplete、onSuccess 和 onError 的情况下会调用 doOnEach 吗? 没错!但是请注意,Single 只有 onSuccess 和 onError(没有 onNext 和 onComplete),而典型的 Observable 有 onNext、onComplete 和 onError(没有 onSuccess) 你认为我应该将此信息添加到我的答案@MeladBasilius 中吗? 是的,您可以将此信息添加到您的答案中 @MeladBasilius 会的!如果这回答了您的问题,请记住接受它,顺便说一句。

以上是关于doOnSuccess 和 doOnEach 之间的区别,以及在哪个用例中我应该使用它们中的每一个的主要内容,如果未能解决你的问题,请参考以下文章

hystrix源码小贴士之调用异常处理

在 WebFlux WebClient 中测试状态码时如何获取响应正文?

wpf 怎么实现 窗口和窗口之间的传值?页面和页面之间?窗口和页面之间?

生产者和消费者之间之间主要是______关系,这样就形成了______.

Android如何在Activity和Service之间传递数据

如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?