Как обрабатываются исключение в Flow

«Как обрабатываются исключение в Flow» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin Flow исключения обрабатываются с помощью операторов catch и onCompletion.

Пример:

flow {
    emit(1)
    throw RuntimeException("Error!")
}
.catch { e -> 
    println("Caught exception: $e") 
    emit(-1) // можно эмитить fallback значение
}
.collect { value -> 
    println("Received: $value") 
}

Нюансы:

  • catch перехватывает исключения выше по цепочке, но не ниже.
  • onCompletion вызывается в любом случае (успех/ошибка), но не перехватывает исключения.
  • Для глобальной обработки можно использовать CoroutineExceptionHandler в корутине.

Если нужно перехватывать исключения в collect, оберни вызов в try-catch.