Rx, как вернуть Throwable или Object в зависимости от типа ошибки

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

Пример:

    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
                 } 
            } 
    }

person ghita    schedule 28.10.2020    source источник


Ответы (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)
                }
            }
}
person Ilya E    schedule 28.10.2020
comment
мой забавный возвращаемый тип - Observable ‹State›, поэтому, если я попытаюсь вернуть Observable.error (it), у меня будет ошибка компиляции - person ghita; 28.10.2020
comment
Вы уверены, что используете onErrorResumeNext, а не onErrorReturn? В моем случае следующие компилируются и работают должным образом. - person Ilya E; 28.10.2020