我有代碼調用2 apis併合並結果。使用改造和rxJava。使用RxJava合併結果,處理錯誤
我該如何處理它,以便如果api的某個問題出現問題,我仍然可以從api的某個工作中得到結果?
IPlaces api = adapter.create(IPlaces.class); //endpoint1
IPlaces api2 = adapter2.create(IPlaces.class); //endpoint2
Observable.combineLatest(
api.getPlacesFrom1("key", placeId),
api2.getPlacesFrom2(placeId),
new Func2<PlaceDetailResult1, PlaceDetailResult2, MergedReviews>() {
@Override
public MergedReviews call(PlaceDetailResult placeDetailResult1, PlaceDetailResult2 placeDetailResult2) {
// processToMerge( placeDetailResult1, placeDetailResult2)
return mr;
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MergedReviews>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MergedReviews mr) {
SetAdapter(mr.reviews);
SetPhotosAdapter(mr.photos);
}
});
你是什麼意思「如果有問題」?是否有一個onError被調用,是否是'placeDetailResult'無效,或者沒有消息進入? –
@PeterBarmettler如果其中一個Apis關閉,id仍然像其他api被使用的結果一樣。它會進入onrorror(當ia關閉一個api時),但是我仍然希望從工作api的結果被使用,但我什麼也沒有 – raklos
我想問題是,如果你結合兩個observables和其中一個調用onError,組合observable也將收到onError。你的問題的答案取決於你想要多少錯誤處理。如果你不需要關注錯誤,那麼你可以簡單地使用'.onErrorResumeNext(e-> Observable.just(null))',然後在'combineLatest'的閉包中處理'null'的情況。否則'mergeDelayError'可能會有用。另見[post](http://stackoverflow.com/questions/22340744/best-practice-for-handling-onerror-and-continuing-processing)。 –