Java 带有Observable.timer的Observable.zip
我试图压缩两个可观察对象,在本例中是一个计时器任务和一个实际任务,这样我的订户只有在两个任务都完成时才会被调用。我想用Java 带有Observable.timer的Observable.zip,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我试图压缩两个可观察对象,在本例中是一个计时器任务和一个实际任务,这样我的订户只有在两个任务都完成时才会被调用。我想用Observable.zip实现这一点,但不知怎么的,这不起作用,而且我的Observable.timer没有调用onComplete()。这意味着订阅者永远不会同时获得观测值的结果 当我突然将zip更改为merge时,可观察到。计时器会调用onComplete(),我缺少什么 Observable<Long> delayObs = Observable.timer(
Observable.zip
实现这一点,但不知怎么的,这不起作用,而且我的Observable.timer
没有调用onComplete()
。这意味着订阅者永远不会同时获得观测值的结果
当我突然将zip
更改为merge
时,可观察到。计时器会调用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));
Observable delayObs=Observable.timer(500,TimeUnit.ms);
可观察方法OBS=方法();
mssubscription=Observable.zip(delayObs,methodObs,(pLong,pVoid)->pVoid)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(\uuuu->thisDoesntGetCalled(),throwable->M2Log.e(LOG\u标记,
“错误”,可丢弃);
方法:
private Observable<Void> method() {
return Observable.defer(() -> {
// some work
return Observable.empty();
});
}
私有可观察方法(){
返回可观察。延迟(()->{
//一些工作
return-Observable.empty();
});
}
我在这里遗漏了什么吗?Zip组合了值,但您的方法()的可观察对象没有发出任何信息,因此Zip决定它永远无法组合任何信息,然后完成
您可以将方法更改为此,现在zip确实调用了您提供的函数:
private Observable<Integer> method() {
return Observable.defer(() -> {
// some work
return Observable.just(1);
});
}
私有可观察方法(){
返回可观察。延迟(()->{
//一些工作
可观察到的回报。仅(1);
});
}
Zip组合了值,但您的方法()的可观察对象没有发出任何信息,因此Zip决定它将无法组合任何信息,然后完成。谢谢!这实际上是有道理的。如果你把这个作为答案贴出来,我会接受的。