#android #rx-java2
#Android #rx-java2
Вопрос:
Я пытаюсь вызвать несколько сетевых вызовов (всего 5), каждый из которых независим от других. Я знаю, как вызывать сетевые вызовы в цепочке с помощью RxJava. Но при вызове по цепочке, если при вызове 3-го или 4-го сетевого вызова возникает ошибка, остальные вызовы выполняться не будут. Поэтому я хочу, чтобы остальные сетевые вызовы продолжали выполняться, даже если предыдущие вызовы завершились неудачей. Есть ли способ найти решение для этой ситуации?
Ответ №1:
Да, есть, вы можете использовать onErrorResumeNext. пример моего кода :
primaryMenuFetcher.getMenu()
.observeOn(uiScheduler)
.flatMap { menuItems ->
onView {
primaryMenu = menuItems
setPrimaryMenuList(primaryMenu)
}
return@flatMap model.getPromotions()
}
.onErrorResumeNext { return@onErrorResumeNext model.getPromotions() }
.observeOn(uiScheduler)
.doFinally { onView { hideProgressBar() } }
.subscribe({ fetchedLeagues ->
onView {
featuredLeagues = fetchedLeagues
showPopularLeagues()
setPopularLeaguesList(featuredLeagues)
}
}, {
showError()
})
Существуют также другие варианты обработки ошибок Rx2. Обратитесь к документации
Комментарии:
1. Я попробую с этим. Спасибо
2. Нет проблем, спросите, нужна ли дополнительная помощь. Если все в порядке, пожалуйста, отметьте как ответивший 🙂
3. Почему вы удалили флаг ответа?
Ответ №2:
Я думаю, что одной из лучших вещей здесь было бы mergeDelayError. Это задержит ошибки до завершения всех наблюдаемых или с ошибками.
Это было бы одним из вариантов:
Observable.mergeDelayError(
obs1.subscribeOn(Schedulers.io()),
obs2.subscribeOn(Schedulers.io()),
//...
)
.subscribe();
subscribeOn
Это больше для гарантии того, что запросы выполняются параллельно. Я не знаю, является ли io
планировщик наиболее подходящим в этом сценарии, но у меня он работал.
Если поток выдает ошибки, вы получите составное исключение с каждой проблемой, возникшей для каждого отдельного наблюдаемого. Если вам нужно проверить их по отдельности, вы можете посмотреть на это исключение.
Комментарии:
1. Что вы имеете в виду? Я опубликовал код в ответе. Что еще вам нужно?