触发在主题的下一个上可观察并共享结果



我有一个按钮,按下该按钮时应该触发btnSubjectonNext,并在我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()触发的。

然后更新视图,因为它正在侦听successObservablefailureObservable

这可能吗?也许apiObservable上有.share()

更新

我添加了共享运算符,并且所有可观察量在首次订阅时都会发出项目。即使是过滤器也没有阻止它...我一定错过了一些明显的东西

可能有几种方法可以做到这一点。

正如您所写,使用share()运算符将输出乘以许多Subscribers。但是,你必须小心,你还必须打电话给connect(),把冷Observable变成热的。如果呼叫也replay(),则无需多次呼叫connect()。 (来源(

然而,还有更简单的解决方案:使用Jake Wharton的库RxReplayingShare。上一篇博客文章的作者在他的下一篇文章中建议它

最新更新