RxJava2 - 一旦它发生变化,如何观察一个已经初始化的空可观察对象?
RxJava2 - how to observe an already initialised empty observable once it changes?
所以我有一个已经初始化为 class 成员的 Single。它像这样初始化:
var myObservable: Single = Observable.empty().toSingle()
这被定义为 class 成员。
之后,在 class 已经初始化之后,我终于得到了实际的响应,我希望这个 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 ?
}
但问题是我在 class 调用的最开始压缩了两个 obervable(其中一个是 myObservable),我正在尝试监听两者的变化并采取行动.这是 zipWith 函数:
someApi.fetchOrders(orderNumber).zipWith<MyResponse,Pair<OrdersResponse,MyResponse>>(myObservable) { t1, t2 ->Pair(t1,t2)}
但我在 myObservable 仍初始化为空时调用了它。后来当我收到回复时,我更改了它,但实际上我为 observable 分配了一个新的 VALUE,我没有保留我在 zip 中看到的那个。我如何更新 myObservable 但保留 zipWith 正在观看的相同参考?
我尝试将 myObservable 更改为主题,然后当我压缩它时它看起来像这样:
someApi.fetchOrders(orderNumber).zipWith>(myObservable.toSingle()) { t1, t2 ->Pair(t1,t2)}
但它从不执行函数 lambda。
zipWith
在两个 Observables 发出时发出,并将具有相同索引的项目配对。当 fetchOrders
没有发出时,您的主题可能发出,因此 zipWith 没有做任何事情。您可以使用主题并将 zipWith
更改为 subject.withLatestFrom(someApi.fetchOrders())
。一旦你将某些东西推入主题,withLatestFrom
将发出来自 fetchOrders()
.
的最后一个值
所以我有一个已经初始化为 class 成员的 Single。它像这样初始化:
var myObservable: Single = Observable.empty().toSingle()
这被定义为 class 成员。
之后,在 class 已经初始化之后,我终于得到了实际的响应,我希望这个 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 ?
}
但问题是我在 class 调用的最开始压缩了两个 obervable(其中一个是 myObservable),我正在尝试监听两者的变化并采取行动.这是 zipWith 函数:
someApi.fetchOrders(orderNumber).zipWith<MyResponse,Pair<OrdersResponse,MyResponse>>(myObservable) { t1, t2 ->Pair(t1,t2)}
但我在 myObservable 仍初始化为空时调用了它。后来当我收到回复时,我更改了它,但实际上我为 observable 分配了一个新的 VALUE,我没有保留我在 zip 中看到的那个。我如何更新 myObservable 但保留 zipWith 正在观看的相同参考?
我尝试将 myObservable 更改为主题,然后当我压缩它时它看起来像这样:
someApi.fetchOrders(orderNumber).zipWith>(myObservable.toSingle()) { t1, t2 ->Pair(t1,t2)}
但它从不执行函数 lambda。
zipWith
在两个 Observables 发出时发出,并将具有相同索引的项目配对。当 fetchOrders
没有发出时,您的主题可能发出,因此 zipWith 没有做任何事情。您可以使用主题并将 zipWith
更改为 subject.withLatestFrom(someApi.fetchOrders())
。一旦你将某些东西推入主题,withLatestFrom
将发出来自 fetchOrders()
.