Ответ
В корутинах ошибки обрабатываются через try-catch блоки или механизмы CoroutineExceptionHandler и SupervisorJob.
- try-catch – стандартный способ:
viewModelScope.launch {
try {
repository.fetchData()
} catch (e: Exception) {
// Обработка ошибки
}
}
- CoroutineExceptionHandler – глобальный обработчик:
val handler = CoroutineExceptionHandler { _, exception ->
Log.e("CoroutineError", "Caught $exception")
}
viewModelScope.launch(handler) { /* ... */ }
- SupervisorJob – изолирует сбои в дочерних корутинах:
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
scope.launch { /* Если упадет, не затронет другие корутины */ }
Также можно использовать async с await() и обрабатывать исключения при вызове.