ReactiveX中嵌套的observable

时间:2017-02-08 05:14:36

标签: reactive-programming rx-android

我有两个操作:

  1. 从服务器加载项目(该项目仅包含某些文件)
  2. 从本地数据库加载项目(db中的项目可能包含其他项目 的Fileds)
  3. 将该项目合并为一个更新UI
  4. 更新db
  5. 中的项目

    我知道如何在每个单独的操作中使用rx,但是一旦调用了所有这些操作,我只考虑在其他内部使用nest observable,这将导致回调地狱。

    完成这些工作的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您的描述,服务器和本地数据库查询应该并行发生,在我们将两个数据组合在一起之后,您需要使用zip运算符。 zip将订阅服务器和本地数据库observable,当两个Observable都发出值时,你将接下来使用服务器和数据库数据,然后将它们组合在zip运算符func中,你将获得发出组合的Observable数据

每次发送组合数据(doOnNext),在后台启动保存操作,并在订户中根据组合数据更新Ui。

Observable<ServerData> getServerData = ...;
Observable<LocalDbData> getLocalDbData = ...;

Observable
    .zip(getServerData, getLocalDbData,
        (serverData, localDbData) -> combinedData(serverData, localDbData))
    .doOnNext(combinedData -> updateDataInDb())
    .subscribe(combinedData -> updateUi(combinedData));
相关问题