Rx как вернуть Throwable или объект на основе типа ошибки

#android #kotlin #rx-java2 #rx-kotlin

#Android #kotlin #rx-java2 #rx-kotlin

Вопрос:

У меня есть метод, который возвращает наблюдаемое. У меня есть такой случай, когда в случае ошибки мне нужно проверить тип ошибки, и для какой-то конкретной ошибки мне нужно вернуть MyObject вместо error .

Пример:

     override fun getSomething(param: String): Observable<State> {
        return someInterface.getSingleResult(param)
            .flatMapObservable {
                when(something) {
                    true -> {
                        Observable.just(State.ACTIVE)
                    }
                    false -> {
                        Observable.just(State.PAUSED)
                    }
                }
            }
            .onErrorReturn {
                 if(it is Something) {
                      State.INACTIVE
                 } else {
//                    returns Throwable  <- don;t know how to handle this
                 } 
            } 
    }
  

Ответ №1:

Я не уверен, что правильно понял, но сработает ли для вас следующее?

 .onErrorResumeNext {
    if (it is Something) {
        Observable.just(State.INACTIVE)
    } else {
        Observable.error(it)
    }
}

fun testObservable(): Observable<Int> {
    return Observable.just(1, 2, 3)
            .onErrorResumeNext { error: Throwable ->
                if (error is IllegalArgumentException) {
                    Observable.just(0)
                } else {
                    Observable.error(error)
                }
            }
}
  

Комментарии:

1. мой забавный возвращаемый тип — Observable<State> , поэтому, если я попытаюсь вернуть Observable.error(it), у меня будет ошибка компиляции

2. Вы уверены, что используете onErrorResumeNext , а не onErrorReturn используете? В моем случае следующее компилируется и работает должным образом.