RxJava2-一旦已经初始化的空可观察对象发生变化,如何观察它



所以我有一个已经初始化为类成员的Single。它被初始化为:

var myObservable:Single=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 ?

}

但问题是,我在类调用的一开始就压缩了两个obervable(其中一个是myObservable),我试图倾听这两个对象的变化并采取行动。这是zipWith函数:

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

但当myObservable仍初始化为空时,我调用了它。后来,当我得到一个响应时,我改变了它,但实际上我给可观察到的值分配了一个新的值,我没有保留我在zip中看到的那个值。我如何更新myObservable,但保持zipWith正在观察的相同引用?

我试着把我的Observable改成一个主题,然后当我压缩它时,它看起来像这样:

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

但它从不执行函数lambda。

zipWith在两个Observables发射时发射,并将具有相同索引的项配对。你的受试者可能在fetchOrders没有发射的时候发射,所以zipWith什么都没做。您可以使用主题并将zipWith更改为subject.withLatestFrom(someApi.fetchOrders())。一旦你把一些东西推进主题,withLatestFrom就会发出fetchOrders()的最后一个值。

最新更新