假設你的api都返回一個Observable類型爲T的發射,那麼第一步就是修改這些可觀測值,使它們超時。 您可以使用amb
和Timer
函數來做到這一點。
Observable<T> apiCall1WithTimeout = Observable.amb(apiCall1(),
Observable.Timer(500, TimeUnit.MILLISECONDS)
.flatmap(l -> Observable.error(new Exception("Api1 timed out")));
Observable<T> apiCall2WithTimeout = Observable.amb(apiCall2(),
Observable.Timer(500, TimeUnit.MILLISECONDS)
.flatmap(l -> Observable.error(new Exception("Api2 timed out"))));
第二步是進一步修改您的觀測值,以便他們在不同的線程上工作。這是使用subscribeOn
操作
Observable<T> apiCall1WithTimeoutNewThread = apiCall1WithTimeout.subscribeOn(Schedulers.newThread());
Observable<T> apiCall2WithTimeoutNewThread = apiCall2WithTimeout.subscribeOn(Schedulers.newThread());
的最後一步是從您的觀測合併排放量完成,但要在最後發射的任何超時錯誤,幸運的是,mergeDelayError
符不只是如此
Observable<T> mergedCalls = Observable.mergeDelayError(apiCall1WithTimeoutNewThread, apiCall2WithTimeoutNewThread);
輝煌,這正是我想要的,謝謝。 –