The Functional Part
Don’t describe how to process the data using a loop instead have your code state what you want to happen.
Use functional concepts to build nice observable streams:
- Map: transform one collection into another.
- Filter: filter one collection into a smaller collection.
- Reduce: take a collection and reduce it into a single result (like inject in Ruby).
- Zip: zip two collections into a single collection.
Reactive programming requires thinking functionaly.
Observables
- Turn events into collections.
- Allow you to handle errors in the collection.
- Unsubscribe when the event is done.
Observable methods
- merge: combine collections into a collection as each item arrives.
- concatAll: combine collections into a new collection in the order in which they were created. Flatten async requests and resolve race conditions.
- takeUntil: creates a single observable of a source collection and a stop collection. When event from stop collection occurs unsubscribe from source.
- switchLatest: only use the latest collection. Throw out the rest.
- distinctUntilChanged: filters out duplicate occurrences.
Example
(from https://github.com/Reactive-Extensions/RxJS)
/* Only get the value from each key up */ var keyups = Rx.Observable.fromEvent($input, 'keyup') .map(function (e) { return e.target.value; }) .filter(function (text) { return text.length > 2; }); /* Now throttle/debounce the input for 500ms */ var throttled = keyups .throttle(500 /* ms */); /* Now get only distinct values, so we eliminate the arrows and other control characters */ var distinct = throttled .distinctUntilChanged(); </pre>
Resources
- Reactive-Extensions for Javascript - Learn Reactive Programming by jhusain - Asynchronous JavaScript at Netflix - Adding Even More Fun to Functional Programming With RXJS