我有一个按钮,按下该按钮时应该触发btnSubject
的onNext
,并在我ViewModel
中创建的Observable
中进行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
这可能吗?也许apiObservable
上有.share()
?
更新
我添加了共享运算符,并且所有可观察量在首次订阅时都会发出项目。即使是过滤器也没有阻止它...我一定错过了一些明显的东西
可能有几种方法可以做到这一点。
正如您所写,使用share()
运算符将输出乘以许多Subscribers
。但是,你必须小心,你还必须打电话给connect()
,把冷Observable
变成热的。如果呼叫也replay()
,则无需多次呼叫connect()
。 (来源(
然而,还有更简单的解决方案:使用Jake Wharton的库RxReplayingShare。上一篇博客文章的作者在他的下一篇文章中建议它