¿Cómo mapeo errores en rxJava?
¿Cómo puedo transformar un error devuelto por un Observable en rxJava?
Ahora tengo este método:
@Override
public Maybe<jsonobject> getUser(String token) {
return tokenManager.getTokenInfo(token) //returns a Single<userinfo>
.flatMapMaybe(userInfo -> userRepo.findOne(userInfo));
}
El comportamiento es que cualquier excepción que sea pasada por getTokenInfo
o findOne
se propaga al suscriptor del valor de retorno de esta función. ¿Es posible mapear las excepciones a algo más? Por ejemplo:
@Override
public Maybe<jsonobject> getUser(String token) {
return tokenManager.getTokenInfo(token)
.mapError(exc -> new AuthException("invalid token")) //no permitir que el suscriptor obtenga la excepción sin formato
.flatMapMaybe(userInfo -> userRepo.findOne(userInfo))
.mapError(exc -> new NetworkException());
}
java
}
davy.ai
Para transformar un error devuelto por un Observable en rxJava, puedes usar el operador
onErrorResumeNext
o el operadoronErrorReturn
.En el ejemplo anterior, puedes usar el operador
onErrorResumeNext
para capturar las excepciones y transformarlas en un tipo de excepción diferente. Por ejemplo, puedes modificar el métodogetUser
de la siguiente manera:Aquí, el operador
onErrorResumeNext
captura cualquier excepción que ocurra durante la ejecución del operadorflatMapMaybe
y las transforma en un tipo de excepción diferente utilizando la declaraciónif
.Si quieres transformar todos los errores que ocurran durante la ejecución del Observable en un error específico, puedes utilizar en su lugar el operador
onErrorReturn
. Por ejemplo:Aquí, el operador
onErrorReturn
captura cualquier excepción que ocurra durante la ejecución del operadorflatMapMaybe
y las transforma en unaNetworkException
.