Выбор ответа Senior Flow, StateFlow и SharedFlow обновлено
Что ловит оператор catch
Вопрос
Какие исключения перехватит catch в цепочке flow.map { a(it) }.catch { emit(fallback) }.collect { b(it) }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Только из flow и map, выше по цепочке. catch прозрачен для исключений ниже себя: он ловит ошибки upstream (билдер, map), но не из коллектора.
Варианты ответа
- Исключения из
b(it)внутриcollect - Все исключения в цепочке, выше и ниже
- Только из
flowиmap, выше по цепочкеправильный ответ - Только
CancellationExceptionпри отмене
Разбор
catch прозрачен для исключений ниже себя: он ловит ошибки upstream (билдер, map), но не из коллектора. Ошибка в b(it) уйдёт наружу из collect. Чтобы обработать и её, логику переносят в onEach { b(it) } перед catch и завершают collect() без лямбды или launchIn. CancellationException catch наоборот не должен глотать.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.