ghita
ghita

Reputation: 2796

Rx how to return Throwable or Object based on error type

I have a method that returns an Observable. I have this case where, in case of error I need to check error type, and for some specific error I need to return MyObject instead of error.

Example:

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

Upvotes: 1

Views: 954

Answers (1)

Ilya E
Ilya E

Reputation: 752

I'm not sure I got it right, but would the following work for you?

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

Upvotes: 4

Related Questions