RxJava2-更改后如何观察已经初始化的空可观察对象?

时间:2019-01-23 10:25:08

标签: rx-java rx-java2

所以我有一个已被初始化为班级成员的Single。它会像这样初始化:

var myObservable:单个= Observable.empty()。toSingle()

这被定义为类成员。

此后,在开始上课之后,我终于得到了实际的响应,我希望此myObservable现在成为响应:

  private fun callback(response:Response) {
                myObservable= Single.just(response)//now look, myObservable got changed, but im watching it in the zipWith call. how can i tell zip to watch this one now instead of the empty one i initialized ?


            }

但是问题是我在类调用的开始就压缩了两个obervables(其中一个是myObservable),并且我试图监听两者中的更改并采取措施。这是zipWith函数:

  someApi.fetchOrders(orderNumber).zipWith<MyResponse,Pair<OrdersResponse,MyResponse>>(myObservable) { t1, t2 ->Pair(t1,t2)}

但是当myObservable仍然被初始化为空时,我调用了此方法。后来,当我得到一个响应时,我更改了它,但实际上我为可观察对象分配了一个新值,但我并没有保留正在看拉链的那个值。我如何更新myObservable,但保留zipWith正在观看的相同引用?

我尝试将myObservable更改为主题,然后在压缩时看起来像这样:

someApi.fetchOrders(orderNumber).zipWith>(myObservable.toSingle()){t1,t2-> Pair(t1,t2)}

,但是它从不执行功能lambda。

1 个答案:

答案 0 :(得分:1)

zipWith会在两个Observables发出并配对具有相同索引的项目时发出。您的主题可能是在fetchOrders不在时发出的,因此zipWith没有执行任何操作。您可以使用主题并将zipWith更改为subject.withLatestFrom(someApi.fetchOrders())。一旦将某些内容推入主题,withLatestFrom就会发出fetchOrders()中的最后一个值。