Disclaimer: I am one of the authors of the observed reduction, so it’s hard for me to be 100% impartial.
We do not currently provide any reasons why the contraction-observable is better than the contraction-saga, because ... it is not. 😆
tl; dr there are pros and cons for both. Many will find one more intuitive than the others, but both of them are difficult to learn differently if you do not know RxJS (redux-observable) or generators / "effects as data" (redux-saga).
They solve the same problem in extremely similar ways, but they have some fundamental differences that become really obvious only after you use them enough.
redux-observable drops almost everything to idiomatic RxJS. Therefore, if you have knowledge of RxJS (or get it), learning and using the abbreviated observable is super super natural. It also means that this knowledge can be transferred to other things than redux. If you decide to switch to MobX, if you decide to switch to Angular2, if you decide to switch to some future X hotness, the chances are very good that RxJS can help you. This is due to the fact that RxJS is a common asynchronous library and in many ways is similar to the programming language itself - the whole paradigm of "reactive programming". RxJS has existed since 2012 and starts as an Rx.NET port (there are "ports" in almost every main language, this is useful).
redux-saga provides its time-based operators, so when the knowledge you acquire about generators and handle side effects in this style of process manager can be transferred, the actual operators and usage are not used in any other main library. So a little unsuccessful, but, of course, should not be a deal break.
It also uses “effects as data” ( described here ), which can be difficult to wrap around you at first, but that means your reduction saga code does not actually perform the side effects themselves. Instead, the helper functions that you use create objects that look like tasks that are intended to have a side effect, and then the internal library does it for you. This makes testing very easy, without the need to taunt and is very attractive to some people. However, I personally found that this means that your unit tests override a significant portion of your saga logic - making these tests not very useful IMO (this is not shared by everyone)
People often ask why we are not doing something similar with the observed decrease: for me this is fundamentally incompatible with normal idiomatic Rx. In Rx, we use operators such as .debounceTime() , which encapsulates the logic required for debounce, but that means that if we want to make a version that actually does not debouncing, but instead emits task objects with intent, you are now lost the power of Rx, because you can’t just simply translate the operators, because they will work on this object of the task, and not on the real result of the operation. It is very difficult to explain elegantly. This again requires a deep understanding of Rx in order to understand the incompatibility of the approaches. If you really want something like this, look for redux-cycles , which uses cycle.js and basically has these goals. I believe that it requires too many ceremonies for my tastes, but I urge you to give him a chance if he interests you.
As ThorbenA mentioned, I do not shy away from recognizing that the reducing saga (10/13/16) is currently the clear leader in the comprehensive management of side effects for contraction. It was launched earlier and has a more reliable community. Thus, there is a lot of attraction for using the de facto standard over a new child on the block. I think it is safe to say that if you use either without prior knowledge, you may encounter some confusion. We use fairly advanced concepts that, as soon as you “get”, simplify the management of complex side effects, but until then many stumble.
The most important piece of advice I can give is not to bring any of these libraries before you need them. If you make simple aiax calls, you probably don't need them. redux-thunk is stupid, easy to learn and provides enough for the basics - but the harder asynchronously, the harder (or even impossible) it becomes for redux-thunk. But for redux-observables / saga in many respects, it shines most, the more complicated asynchronous. In addition, there are many advantages to using a redux with one of the others (redux-observable / saga) in the same project! redux-thunk for your simple simple things, and then only using a reducible observable / saga for complex things. This is a great way to stay productive, so you don't fight the reduction-observable / saga for things that are trivial with reduction.