RxJava 2:重新订阅(或取消并再次订阅)到第二个无限可观察链

时间:2017-09-29 09:12:45

标签: android sockets observable subscription rx-java2

我有两个链接成一个的无限可观察量(getLastNDaysItemsInfinite和listenToServerUpdates)。 第一个发出第二个应该听的项目。

            repository
            .getLastNDaysItemsInfinite(4)
            .flatMap(items ->
                    Observable
                            .fromIterable(items)
                            .map(Item::getId)
                            .toList()
                            .flatMapObservable(ids ->
                                    repository
                                            .listenToServerUpdates(ids)
                                            .onErrorResumeNext(throwable -> {
                                                Log.w(TAG, "Error occurred: ", throwable);
                                                return Observable.empty();
                                            }))
            );

listenToServerUpdates observable打开套接字连接并在我们取消订阅时关闭它。所以我需要实现行为,当getLastNDaysItemsInfinite(4)发出新的项目列表时,listenToServerUpdates将关闭其套接字连接并打开新的套接字连接。但现在它只是为getLastNDaysItemsInfinite并行创建新的listenToServerUpdates可观察对象,并因此为每个新的包项连接新的套接字连接。

当getLastNDaysItemsInfinite发出新项目时,我如何重新订阅或取消并再次订阅运行listenToServerUpdates observable?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用switchMap代替flatMap

喜欢这个

 repository
            .getLastNDaysItemsInfinite(4)
            .switchMap(items ->
                Observable
                        .fromIterable(items)....

因此,每当新列表来自getLastNDaysItemsInfinite之前创建的Observables取消订阅时。 Here是文档