BACK
Use casesError 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 НЕ вызывается.

script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...