我有一个名为loadBalls的函数,其第二个参数接受一个观察者。当调用loadBalls传递一个常规观察者时,该观察者将其onNext命中两次。因为我只对它第二次被击中感兴趣,所以我作为观察者传入AsyncSubject,然后在loadBalls调用之后订阅它。
secondsPassed = 0;
while(secondsPassed < 10) {
try {
Thread.sleep(1000);
secondsPassed++;
AsyncSubject<List<Ball> asyncSubj = AsyncSubject.create();
loadBalls(id, asyncSubj);
asyncSubj.subscribe(new Observer<List<Ball>>() {
@Override public void onCompleted() {
boolean complete = true;
}
@Override public void
onError(Throwable e) {
boolean problem = true;
}
@Override public void
onNext(List<Ball> balls) {
boolean next = true;
}
});
} catch (InterruptedException e) {}
上述回调都没有被击中,但我知道第二个onNext存在,因为如果我只是这样做onNext会被击中两次:
loadBalls(id, same_observer_instance_as_above)
loadBalls的实现是一个我看不到的黑盒子,我想确认我上面使用AsyncSubject。