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

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

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

更新

我在首次订阅时添加了共享运算符和所有可观察到的项目。甚至过滤器也没有阻止它……我一定会错过一些明显的东西

最佳答案

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

如您所写,使用share()运算符可将输出乘以许多Subscribers。但是,您必须小心,还必须调用connect()将冷的Observable变成热的。如果还呼叫replay(),则无需多次呼叫connect()
Source

但是,还有一个更简单的解决方案:使用Jake Wharton的库RxReplayingShare。先前博客文章的作者在his next article中建议

10-08 17:18