Error handling
A very important aspect of building reliable applications is knowing what to do when things go wrong. It is naive to assume that the network is reliable, that hardware won't fail, or that we, as developers, won't make mistakes.
RxJava embraces this fact and provides a rich set of combinators to deal with failure, a few of which we examine here.
OnError
Let's get started by creating a badly behaved observable that always throws an exception:
(defn exceptional-obs [] (rx/observable* (fn [observer] (rx/on-next observer (throw (Exception. "Oops. Something went wrong"))) (rx/on-completed observer))))
Now let's watch what happens if we subscribe to it:
(rx/subscribe (->> (exceptional-obs) (rx/map inc)) (fn [v] (prn-to-repl "result is " v))) ;; Exception Oops. Something went wrong rx-playground.core/exceptional-obs/fn--1505
The exception thrown by exceptional-obs
isn't caught anywhere so...