我需要使用一个可观察对象执行一个任务,获取发出的数据,然后使用另一个可观察对象执行另一个查询。通常我会使用flatmap
来链接两个可观察对象,只关心发出的最后一块数据。现在需要在这个过程中更新视图。比如当第一个Observable发出数据时,我应该在UI上显示一个文本行。
我知道我可以将它分解为两个调用时间,在第一个的onNext()
中调用第二个Observable,但这很麻烦。
我怎样才能在不走那条路的情况下实现我上面描述的目标?由于
下面是我以前项目中的一个例子,使用doOnNext():
API.getVideoListObservable()
.doOnError(t -> t.printStackTrace())
.map(r -> r.getObjects())
.doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
.doOnNext(l -> kalturaVideoList.addAll(l))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
注意 .doOnNext(l -> VideoActivity.this.runOnUiThread(() -> fragment.updateVideoList(l)))
-在它之后你可以随时使用flatmap()
, doOnNext()
将在flatmap()
之前执行
Simon basldoOnNext()
的解释很好:
doOnNext
是副作用:你想要反应(例如;日志)到项目在你的河流的中间步骤的排放,例如之前流被过滤,为横向行为,如日志,但你仍然希望该值沿流传播
onNext
更加final,它消耗了这个值。