Sim*_*slé 81
doOnNext 用于副作用:您希望在流的中间步骤中对项目排放做出反应(例如,记录),例如在流过滤之前,对于横向行为(如日志记录),但您仍希望值向下传播流.
onNext 更为终极,它消耗了价值.
tro*_*tto 19
首先,在Observable和Subscribe之间的运算符链中Observable可以调用更多次,这为您提供了调试代码的更多可能性.由于其"流"性质,在RXJava中调试并不容易,Single反而使调试更容易.为此,您可以考虑将其与Maybe运营商合并.为什么不使用简单的doOnEvent()?因为调试与代码的逻辑没有严格的关系,理论上你也可以消除Single之前的生产.
另一可能使用它,发生在你希望缓存从服务器的响应,因此,例如,你可以使用doOnEach(),但也 Observable因为它可以让你让你的代码更易读的,而不是你会放一个简单的doOnNext(),理想本来是结构化遵循其他指示.(这是有争议的,因为所有的建筑思想)
我发现在RXJava2中使用此运算符的一个典型示例是显示进度条,尤其是当您在doOnNext()不使用所有三种已知方法(onNext,onError,onComplete)的情况下订阅时,就像在RXJava2中使用Consumer订阅的情况一样正如本博客小节的这个片段所示:使用doOnNext显示进度条(< - 请点击此链接,因为这是一个很长的教程,直接进入半页,看看如何使用'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") }}
Run Code Online (Sandbox Code Playgroud)
同样地doOnError(),为了相同的调试目的,您可以使用其他不言自明的运算符:
doOnSubscribe(),doOnUnsubscribe(),doOnCompleted(),doOnError(),doOnTerminate(),finallyDo(),doOnEach(),doOnRequest()
编辑(由于评论中的问题):
onNext()和上面的方法都只是回调,请参阅该,doOnNext()作为官方文件说,
只需修改一个Observable,以便在调用onNext时调用一个动作.
非常简单,这就是为什么有时会调用上传进度条的原因,但实际上也是在存储库模式中使用,例如,如果你想在调用改进后将数据存储到db /或缓存中.
如果你真的很好奇,那么doSomethingReactive方法只需doOnNext()在"真实"方法中调用方法(来自Interface Action的回调)SomethingReactive