所以我有一个已被初始化为班级成员的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。
答案 0 :(得分:1)
zipWith
会在两个Observables发出并配对具有相同索引的项目时发出。您的主题可能是在fetchOrders
不在时发出的,因此zipWith没有执行任何操作。您可以使用主题并将zipWith
更改为subject.withLatestFrom(someApi.fetchOrders())
。一旦将某些内容推入主题,withLatestFrom
就会发出fetchOrders()
中的最后一个值。