有由運營商這樣的一個簡單的解決辦法:AMB
只要看看的System.out的輸出。
文檔:http://reactivex.io/documentation/operators/amb.html
基本上你訂閱觀察到兩者在同一時間和任何可觀察到的第一發射獲得通過。其他觀察對象將取消訂閱。
@Test
public void ambTest() throws Exception {
TestScheduler testScheduler = new TestScheduler();
Observable<Integer> network = Observable.timer(1000, TimeUnit.MILLISECONDS, testScheduler)
.concatMap(aLong -> Observable.just(1, 2, 3))
.doOnSubscribe(disposable -> System.out.println("connect network"))
.doOnDispose(() -> System.out.println("dispose network"));
Observable<Integer> local = Observable.timer(500, TimeUnit.MILLISECONDS, testScheduler)
.concatMap(aLong -> Observable.just(4, 5, 6))
.doOnSubscribe(disposable -> System.out.println("connect local"))
.doOnDispose(() -> System.out.println("dispose local"));
Observable<Integer> integerObservable = Observable.ambArray(network, local);
TestObserver<Integer> test = integerObservable.test();
testScheduler.advanceTimeBy(600, TimeUnit.MILLISECONDS);
test.assertValues(4, 5, 6);
testScheduler.advanceTimeBy(1000, TimeUnit.MILLISECONDS);
test.assertValues(4, 5, 6);
}
它的工作。感謝你的回答。 – xymelon
如果'networkObservable'發出錯誤,我想繼續使用'localObservable',我該怎麼做? – xymelon
你可以使用mergeDelayError(在這種情況下,你會在localObservable發射一些東西之後得到onError),或者只是用onErrorREsumeNext或類似的方法捕獲networkObservable的所有錯誤 – yosriz