Mejorando la legibilidad de los errores de las corutinas
Tengo una solicitud de retrofit que devuelve una función suspendida:
suspend fun getItems(): retrofit2.Response<><item>>
y la manejo de esta manera:
try {
val response = service.getItems()
when {
response.isSuccessful -> handleResponse()
else -> handleError(Throwable(
response.errorBody()?.charStream()?.readText()
))
}
} catch (e: Exception) {
handleError(e)
}
El problema es: a veces obtengo un error en mis registros que no es lo suficientemente legible para detectar el problema, por ejemplo:
viewModel.getItems.invokeSuspend(Unknown Source:222)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(Unknown Source:9)
at kotlinx.coroutines.DispatchedTask.run(Unknown Source:12)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(Unknown Source:10)
at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(Unknown Source:0)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(Unknown Source:22)
¿Cómo puedo mejorar el manejo de errores de las coroutines para mejorar su legibilidad?
davy.ai
Como experto en TI especializado en Android, Retrofit y Kotlin Coroutines, puedes mejorar el manejo de errores en las coroutines para mejorar la legibilidad utilizando el enfoque de concurrencia estructurada de las coroutines. En lugar de utilizar un bloque try-catch, puedes utilizar
coroutineExceptionHandler
para manejar los errores de una forma más legible y estructurada.Aquí tienes un ejemplo de cómo implementar
coroutineExceptionHandler
:De esta manera, todas las excepciones lanzadas dentro de este
coroutineScope
serán capturadas porcoroutineExceptionHandler
y podrás manejarlas de forma más legible y estructurada. Puedes usar cualquier biblioteca de registro como Timber o Logger para registrar estos errores y entender mejor la naturaleza del problema.