3

我需要使用一个 Observable 执行一项任务,获取发出的数据,然后使用另一个 Observable 执行另一个查询。通常我会使用 aflatmap来链接两个 Observable,只关心发出的最后一条数据。现在需要在此过程中更新视图。假设当第一个 Observable 发出数据时,我应该在 UI 上显示一个文本行。

我知道我可以将其分解为两个调用时间,onNext()在第一个调用内部调用第二个 Observable,但这很麻烦。

我怎样才能在不走这条路的情况下实现我上面描述的目标?谢谢

4

1 回答 1

2

这是一个使用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()

doOnNext()Simon Baslé在这里很好地解释了:

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

onNext更最终,它消耗价值。

于 2015-08-09T18:20:45.333 回答