Probabilmente in ritardo col resto del mondo, h chiarito un punto importante riguardo gli observable, e l’ho capita usando observable-redux. Prendo nota.
Definendo un Epic, da uno stream di action$ si restituisce un’altro stream di action
La Epic è eseguita dopo che il relativo reducer ha fatto il suo lavoro.
È possibile, data una action, restituirne un’altra, tramite .map()
in tal caso l’oggetto da restituire è proprio una action
È possibile inoltre restituire uno stream (un observable) che restituisce una (o più) action, in questo caso
si deve usare il metodo mergeMap()
Es.:
const loadOrdersEpic = (action$, store) => { return action$ .ofType('LOADORDERS') .flatMap( () => { Observable.from(ajax('req')) }) .mergeMap((res) => { return Observable.merge( Observable.of({type:'SUCCESSFULL.NET'}), Observable.of({type:'DATAREADY', res}) ); }); }
a differenza di map posso comporre degli observable(s) quindi generare più action (ovvero uno stream che genera più action)
const loadOrdersEpic = (action$, store) => { return action$ .ofType('LOADORDERS') .flatMap( () => { Observable.from(ajax('req')) }) .map((res) => { return {type:'DATAREADY', res} }); }