angular-redux / store

Angular 2+ bindings for Redux
MIT License
1.34k stars 205 forks source link

Request for articles/epics.md #553

Open westandy-dcp opened 5 years ago

westandy-dcp commented 5 years ago

This is a...

I would like the Epics.md updated to reflect some modern approaches to the login epic. The following example is how we implemented an epic. The main part that bothered me with your current example is the embedded http.post(...).pipe(...) because it reminds me too much of the old callback hell.

For what it is worth, I hope this helps some folks develop cleaner code.

  login = (action$: ActionsObservable) =>
     action$.pipe(
       ofType(SessionActions.LOGIN_USER),
       map(() => getSomePayload()),
       map((payload: SomeStruct) => formatPayload(payload)),
       mergeMap((payload: SomeOtherStruct) => this.http.post(...)),
       map(response:any) => Actions.createAnAction(response)),
       catchError(this.handleError)
    )
takahser commented 4 years ago

Also, there seems to be a problem with the current version of ActionsObservable. I keep getting this error:

Generic type 'ActionsObservable' requires 1 type argument(s).ts(2314)

I'm using "redux-observable": "^1.1.0"

takahser commented 4 years ago

I was able to resolve this issue by replacing the redux-observable dependency with

"redux-observable-es6-compat": "^1.2.1",

related: https://github.com/redux-observable/redux-observable/issues/644