Error Handling with catchError
Explain how catchError intercepts an Observable's error and how to recover, rethrow, or substitute a fallback stream.
When an Observable errors, it terminates — no further next emissions will ever occur on that stream, even if the underlying source could theoretically keep producing values, which is exactly why unhandled errors in RxJS pipelines are so disruptive: a single failed HTTP request can silently kill an entire subscription that was expected to keep emitting indefinitely (like a polling interval), unless error handling is deliberately put in place.
It's like a safety net under a trapeze act — if a performer falls (an error occurs), the net catches them and the show can continue with a substitute act (a fallback value) rather than the entire performance ending abruptly the moment anyone falls.