我正在使用RxJava和RxAndroid與Retrofit2。RxJava:如何處理zip運算符的錯誤?
Observable<ResponseOne> responseOneObservable = getRetrofitClient().getDataOne()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
Observable<ResponseTwo> responseTwoObservable = getRetrofitClient().getDataTwo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
在上面的兩個Observer上使用如下所示的zip操作符。
Observable<ArrayList<TestData>> testDataObservable = Observable.zip(responseOneObservable, responseTwoObservable, new Func2<ResponseOne, ResponseTwo, ArrayList<TestData>>() {
@Override
public ArrayList<TestData> call(ResponseOne responseOne, ResponseTwo responseTwo) {
ArrayList<TestData> testDataList = new ArrayList();
// Add test data from response responseOne & responseTwo
return testDataList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ArrayList<TestData>>() {
@Override
public void onNext(ArrayList<TestData> testDataList) {
}
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted");
}
@Override
public void onError(Throwable t) {
Log.d(TAG, "onError Throwable: " + t.toString());
}
});
如果存在任何誤差在responseOneObservable
和responseTwoObservable
改型HTTP調用期間發生那麼它會直接調用的testDataObservable
訂戶的onError
方法。
即使兩個observable中的任何一個獲得了成功響應,我也想繼續使用zip運算符的call
方法。
如何使用zip
運算符處理錯誤響應?
我相信'onErrorResumeNext'應該允許你這樣做。 –