我有一个按钮,当按下该按钮时,应触发btnSubject
的onNext
并在由我的Observable
创建的ViewModel
中进行API调用,如下所示:
val apiObservable =
btnSubject.flatMap{ apiService.getSomething()
.toResponseOrErrorObservable()
.subscribeOn(Schedulers.io())}
然后,我可以重用此可观察对象来创建另外两个对象,然后从我的视图中对其进行订阅,使我可以将逻辑保留在
ViewModel
中,如下所示:val successObservable = apiObservable.filter{ it.isSuccess() }
val failureObservable = apiObservable.filter{ it.isFailure() }
因此,apiObservable由
btnSubject.onNext()
被调用触发。然后更新视图,因为它正在监听
successObservable
和failureObservable
这可能吗?也许在
.share()
上带有apiObservable
吗?更新
我在首次订阅时添加了共享运算符和所有可观察到的项目。甚至过滤器也没有阻止它……我一定会错过一些明显的东西
最佳答案
可能有几种方法可以做到这一点。
如您所写,使用share()
运算符可将输出乘以许多Subscribers
。但是,您必须小心,还必须调用connect()
将冷的Observable
变成热的。如果还呼叫replay()
,则无需多次呼叫connect()
。
(Source)
但是,还有一个更简单的解决方案:使用Jake Wharton的库RxReplayingShare。先前博客文章的作者在his next article中建议