我有两个链接成一个的无限可观察量(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?
提前致谢!
答案 0 :(得分:1)
您可以使用switchMap
代替flatMap
。
喜欢这个
repository
.getLastNDaysItemsInfinite(4)
.switchMap(items ->
Observable
.fromIterable(items)....
因此,每当新列表来自getLastNDaysItemsInfinite
之前创建的Observables
取消订阅时。 Here是文档