redux-observable-process-fetch
This library is a redux-observable middleware.
And as redux-observable
is a middleware itself it is a middleware for middleware.
This middleware add caching, refetching, pre and post loading actions support
for async data loading services like Observable.ajax
or any other service with signature
(...args: Array<any>) => Observable<any>
.
Example
The best example is a tests
Initialize redux with redux-observable
and redux-observable-process-fetch
;;;;; const ctreateStoreWithReduxObservableMiddleware = { const processor = ; const middleware = ; const store = ; return store;};
Create action creator
const loadMySuperObject = type: FETCH_DATA meta: type: 'SUPER_OBJECT_LOAD' cache: true payload: args;
Use loadMySuperObject
as usual in redux.
What you will get
For each action with type FETCH_DATA
, like this
const fetchDataAction = type: FETCH_DATA meta: type: ON_FETCH_SOMETHING_COMPLETE cache: false payload: 1 2
It dispatches LOADING_START
and LOADING_END
actions before data fetch starts and after it end.
On fetch complete it dispatches action
type: fetchDataActionmetatype payload: fetchResult meta: fetchDataActionmeta
and on fetch error
type: fetchDataActionmetatype payload: error error: true meta: fetchDataActionmeta
If FETCH_DATA
action meta has cache: false
property, and action with same
payload
and meta.type
has already been successfully processed,
it does nothing (as data is already in redux store).
It fetch
again if there where fetch error at previous call.
If FETCH_DATA
action meta has cache: true
property, it always fetch data
again,
cancelling previous FETCH_DATA
action with same payload
and meta.type
.
If such actions are called simultaneously first action does not run at all.
If sequentially action LOADING_CANCEL
will be run.
Look at tests for more examples.
Install
npm install --save redux-observable-process-fetch