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

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

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

进入

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

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

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

【问题讨论】:

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


【解决方案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 会的!如果这回答了您的问题,请记住接受它,顺便说一句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多