我有一个按钮,当按下该按钮时,btnSubject
的{{1}}会触发,并在我onNext
中创建的Observable
中进行API调用,如下所示:< / p>
ViewModel
然后我可以重复使用这个observable再创建两个,然后从我的视图中订阅,允许我将逻辑保留在val apiObservable =
btnSubject.flatMap{ apiService.getSomething()
.toResponseOrErrorObservable()
.subscribeOn(Schedulers.io())}
中,如下所示:
ViewModel
所以apiObservable由被调用的val successObservable = apiObservable.filter{ it.isSuccess() }
val failureObservable = apiObservable.filter{ it.isFailure() }
触发。
然后更新视图,因为它正在收听btnSubject.onNext()
和successObservable
这可能吗?也许failureObservable
上有.share()
?
更新
我在第一次订阅时添加了共享运算符和所有可观察项目。即使过滤器也没有阻止它...我必须遗漏一些明显的东西
答案 0 :(得分:1)
可能有几种方法可以做到。
正如您所写,使用share()
运算符将输出乘以许多Subscribers
。但是,您必须要小心,还必须致电connect()
将冷Observable
变为热门replay()
。如果同时拨打connect()
,您也不需要多次拨打{{1}}。
(Source)
然而,有更简单的解决方案:使用杰克沃顿的图书馆RxReplayingShare。之前博客文章的作者在his next article
中建议了它