ReactiveX 中的嵌套可观察对象

Nested observable in ReactiveX

我有两个操作:

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

我知道如何为每个操作使用 rx,但是一旦调用所有操作,我只想到在其他内部嵌套可观察,这将导致回调地狱。

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

根据您的描述,服务器和本地数据库查询应该并行进行,在我们拥有这两种数据之后我们将它们合并,因此您需要使用 zip 运算符。 zip 将订阅服务器和本地 DB observable,当两个 Observable 都发出值时,您将继续使用服务器和 DB 数据,然后将它们组合在 zip operator 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));