Какой оператор есть для обработки исключений в Flow

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

Ответ

В Kotlin Flow для обработки исключений используются операторы catch и onCompletion:

  • catch - ловит исключения, возникшие выше по цепочке операторов:
flow { ... }
    .catch { e -> 
        // Обработка исключения
        emit(defaultValue) 
    }
    .collect { ... }
  • onCompletion - вызывается при завершении Flow (успешном или с ошибкой):
flow { ... }
    .onCompletion { cause -> 
        if (cause != null) {
            // Было исключение
        }
    }
    .collect { ... }

Также можно использовать try-catch вокруг вызовов collect, но это менее идиоматично для Flow.