我正在尝试压缩两个observable,在这种情况下是一个计时器任务和一个实际任务,这样我的订阅者只有在完成这两个任务时才会被调用。我希望使用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();
});
}
我在这里错过了什么吗?
答案 0 :(得分:1)
Zip结合了值但你的方法()的Observable没有发出任何东西,因此zip决定它不能组合任何东西然后完成。
您可以将方法更改为此,现在zip会调用您提供的功能:
private Observable<Integer> method() {
return Observable.defer(() -> {
// some work
return Observable.just(1);
});
}