У меня есть код, который вызывает 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, который будет использоваться. Он вступает в onerror (когда ia отключает один api), но мне все же хотелось бы получить результат от рабочего api до но я ничего не получаю – raklos
Я думаю, проблема в том, что если вы объедините два наблюдаемых и один из них вызовет onError, комбинированный наблюдаемый также получит onError. Ответ на ваш вопрос зависит от того, сколько ошибок вы хотите. Если вам не нужно обращать внимание на ошибки, вы можете просто использовать '.onErrorResumeNext (e-> Observable.just (null))', а затем обрабатывать случаи «null» в закрытии 'combLatest'. В противном случае «mergeDelayError» может быть полезным. См. Также этот [post] (http://stackoverflow.com/questions/22340744/best-practice-for-handling-onerror-and-continuing-processing). –