【发布时间】:2016-09-26 07:09:07
【问题描述】:
我正在尝试压缩两个 observables,在本例中是一个计时器任务和一个实际任务,以便我的订阅者只有在两个任务都完成时才会被调用。我想用Observable.zip 来做这件事,但不知何故这不起作用,我的Observable.timer 没有调用onComplete()。这意味着订阅者永远不会得到Observables 的结果。
当我突然将zip 更改为merge 时,Observable.timer 确实调用了onComplete(),我在这里缺少什么?
Observable<Long> delayObs = Observable.timer(500, TimeUnit.MILLISECONDS);
Observable<Void> methodObs = method();
mSubscription = Observable.zip(delayObs, methodObs, (pLong, pVoid) -> pVoid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(__ -> thisDoesntGetCalled(), throwable -> M2Log.e(LOG_TAG,
"error", throwable));
方法:
private Observable<Void> method() {
return Observable.defer(() -> {
// some work
return Observable.empty();
});
}
我错过了什么吗?
【问题讨论】:
-
Zip 合并了值,但你的 method() 的 Observable 没有发出任何东西,因此 zip 决定它永远无法合并任何东西然后完成。
-
谢谢!这实际上是有道理的。如果您将此作为答案发布,我会接受。
标签: java android rx-java observable rx-android