Summary:
This diff introducing the sideEffect abstractions, that creates a fundamental solution for the problem in D20619226: If a subscription to the store errors, the entire store can't be updated anymore, bringing the entire app to a halt.
Applying this abstraction will be done in a next diff.
To essential idea of sideEffect is that it fixes a few problems:
1. I decouples and throttles the effect so that no arbitrary expensive burden is added to every store update
2. It makes sure that a crashing side effect doesn't crash the entire store update
3. It helps with tracing and monitoring perf problems
4. It puts the side effect behind a selector so that the side effect is only triggered if a relevant part of the store changes, like we do for components.
Note that if some subscription _must_ be handled synchronously, than that logic should be in a reducer, not in a subscription or side effect. Luckily we don't have any examples of that in our code base.
This abstraction might actually be intesting to be shared wider for fun and profit.
Reviewed By: passy
Differential Revision: D20625872
fbshipit-source-id: adaf8356950594d50e6a99a17a862f757c3777db