Use cases/Error as data — materialize для безопасного UI
Use cases · 63 流
Error as data — materialize для безопасного UI
Паттерн
В RxJS error — это terminal сигнал: Observable падает, новых значений не будет. Иногда это неудобно — мы хотим показать «карточку с ошибкой» в UI и продолжить принимать новые триггеры. Превращаем error в обычный next через materialize/dematerialize.
Какую проблему решаем
Простой catchError(() => of('error')) внутри inner stream решает 95% случаев. Materialize нужен в особых случаях, когда важно работать с notification-объектами (например, тестирование, логирование всех типов событий).
Операторы и зачем они нужны
materialize() — превращает next/error/complete в объекты {kind, value}. Это поток notifications.
map — заменяем error-notification на обычный next с error-state.
dematerialize() — возвращает stream к обычным next/complete семантикам.
Подводные камни
Если оставить error-notification как есть и пропустить через dematerialize — stream всё равно упадёт.
Не используйте materialize там, где простой catchError читабельнее. Это инструмент для редких случаев.
Error-as-data требует явной обработки в UI. Иначе ошибка будет выглядеть как обычное значение и пользователь не поймёт что произошло.
Что в итоге получаем
Ошибка становится частью данных, а stream продолжает жить. Subscribe error handler НЕ вызывается.