try/catch снаружи launch не ловит ошибку запроса
Обработка ошибок сети написана так:
try {
viewModelScope.launch {
val orders = api.getOrders() // бросает IOException при отсутствии сети
_state.value = Content(orders)
}
} catch (e: IOException) {
_state.value = Error
}
Что произойдёт при отсутствии сети?
- Исключение поймается, если заменить IOException на Exception: сейчас просто не совпадает тип перехватываемого исключения
- Компилятор не разрешит обернуть запуск корутины в try/catch без указания обработчика исключений для области
- Исключение будет поймано, экран покажет состояние ошибки: блок try охватывает запуск корутины целиком
- Блок catch не сработает: launch возвращает управление сразу, а исключение возникает позже уже внутри корутины
