RxJava 中 doOnNext(...) 的目的是什么

新手上路,请多包涵

我们什么时候应该使用 Observable 的 doOnNext( ) 而不是 onNext()?

原文由 Aravind Yarram 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

doOnNext 用于副作用:您想在流的中间步骤中对项目排放做出反应(例如记录),例如在流被过滤之前,对于像记录这样的横向行为,但您仍然希望值向下传播。

onNext 更最终,它消耗了价值。

原文由 Simon Baslé 发布,翻译遵循 CC BY-SA 3.0 许可协议

_重要编辑_:-紧接在下方的粗体字符中-

*一旦掌握了这个概念,我热烈建议您看看这个 链接,它是一个生命的改变者,不仅因为我们使用不同的 observable 作为 ObservableSingleMaybe that could be need a different tool as doOnEvent() for Single and doOnEach() for Observable but because if you want to debug ,有一些原因导致 doOnNext() 通常甚至不是理想的选择,因为我们可以忽略与解决问题相关的其他事件*

原始回复:-部分修改-

首先 doOnNext() 可以在 Observable 和 Subscribe 之间的运算符链中调用 更多次,这为您调试代码提供了更大的可能性。由于其“流”性质,在 RXJava 中调试并不容易, doOnNext() 反而使调试更容易。为此,您还可以考虑将其与 doOnError() 运算符结合使用。为什么不使用简单的 onNext() ?因为调试与代码逻辑并不严格相关,理论上你也可以在投入生产之前删除 doOnNext()

需要理解的一件真正重要的事情是,给定一个 Observable 来订阅长链,您可以在特定点使用 doOnNext 来查看一个运算符返回给另一个运算符的内容:

例如 :

 Observable.just("Donald", "Duck", "Mickey", "Goofy",
                "Uncle")
                .doOnNext{System.out.println("Here ou will get the strings above:$it ")}
                 .map{it.length}
                 .subscribe { println("Here you will get the numbers of how every string is long: $it") }}

一个典型的用例使用 doOnNext() 例如,当你想缓存来自服务器的响应时,你可以使用 map() 可以使用—d231307de5022fb0dd7db92677e doOnNext() ,因为它可以使您的代码更具可读性,因为您可以放置一个简单的 onNext() 理想情况下,它的结构可以遵循其他说明。 (这是有争议的,因为所有的建筑思想)

等同于 doOnNext() 并且出于相同的调试目的,您可以使用其他不言自明的运算符:

doOnSubscribe()、doOnUnsubscribe()、doOnCompleted()、doOnError()、doOnTerminate()、finallyDo()、doOnEach()、doOnRequest()

doOnNext() 允许您查看 Observable(通常很长)链中发生了什么,真正重要的是 您可以窥探链中发生的事情,而不影响任何操作,无需任何转换(让我们说不正确的一种 Log.d 我们在命令式而非反应式代码中使用)。 这就是为什么被称为 副作用 的原因。

编辑(由于评论中的问题):

doOnNext() 和上面的方法只是回调,请参考 doOnNext() 官方文档说的

只是修改一个 Observable,以便它在调用 onNext 时调用一个动作。

真的很简单,这就是为什么有时调用来上传进度条,但也真正用于存储库模式,例如,如果你想在调用 retrofit 之后将数据存储到 db/ 或缓存中。

如果您真的对引擎盖下的 doSomethingReactive 方法感到好奇,只需在“真实”方法 SomethingReactive 中调用方法 call() (来自接口操作的回调)

原文由 trocchietto 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题