Выбор ответа Senior Flow, StateFlow и SharedFlow обновлено

Что ловит оператор catch

Вопрос

Какие исключения перехватит catch в цепочке flow.map { a(it) }.catch { emit(fallback) }.collect { b(it) }?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Только из flow и map, выше по цепочке. catch прозрачен для исключений ниже себя: он ловит ошибки upstream (билдер, map), но не из коллектора.

Варианты ответа

  1. Исключения из b(it) внутри collect
  2. Все исключения в цепочке, выше и ниже
  3. Только из flow и map, выше по цепочкеправильный ответ
  4. Только CancellationException при отмене

Разбор

catch прозрачен для исключений ниже себя: он ловит ошибки upstream (билдер, map), но не из коллектора. Ошибка в b(it) уйдёт наружу из collect. Чтобы обработать и её, логику переносят в onEach { b(it) } перед catch и завершают collect() без лямбды или launchIn. CancellationException catch наоборот не должен глотать.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.