RxJava - почтовый список Observable, если выбросить исключение, как получить успешный ответ - PullRequest
5 голосов
/ 30 мая 2019

Я пытаюсь вызвать несколько API параллельно, используя rxjava2 в Android. он работает в соответствии с требованием, но в случае любого исключения API бросает, он не может дать ответ от других API, поэтому есть ли способ вызвать другой API, который возвращает успешный ответ.

private fun getStoreCouponData() {

    val userObservable = repo2
        .create<StoreCouponsApi>(StoreCouponsApi::class.java!!)
        .getCoupons
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())

    val eventsObservable = repo2
        .create<StoreCouponsApi>(StoreCouponsApi::class.java!!)
        .storeInfo
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())

    val combined = Observable.zip<StoreCoupons, StoreCoupons, StoreList>(userObservable, eventsObservable,
        BiFunction<StoreCoupons, StoreCoupons, StoreList> { response1, response2 -> StoreList(response1, response2) })

    combined.subscribe(object : DefaultObserver<StoreList>() {
        override fun onNext(s: StoreList) {
            for (item in s.store!!.coupons!!) {
                System.out.println(item.store)
            }
        }


        override fun onError(e: Throwable) {
           System.out.println(e)
        }

        override fun onComplete() {

        }
    })

    println(combined)

}    

1 Ответ

2 голосов
/ 30 мая 2019

Существует обратный вызов onErrorResumeNext, который можно использовать для продолжения процесса, когда один запрос приводит к ошибке.

val combined = Observable.zip<StoreCoupons, StoreCoupons, StoreList>(userObservable, eventsObservable,
        BiFunction<StoreCoupons, StoreCoupons, StoreList> { response1, response2 -> StoreList(response1, response2) }).onErrorResumeNext(
// you can error separately on each requests, and you can call other requests )
...