假设你的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);
辉煌,这正是我想要的,谢谢。 –