Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dispatch multiple actions in one effect

I would like to dispatch two actions in one effect. Currently I have to declare two effects to achieve this :

// first effect @Effect() action1$ = this.actions$   .ofType(CoreActionTypes.MY_ACTION)   .map(res => {     return { type: "ACTION_ONE"}   })   .catch(() => Observable.of({     type: CoreActionTypes.MY_ACTION_FAILED   }));  // second effect @Effect() action2$ = this.actions$   .ofType(CoreActionTypes.MY_ACTION)   .map(res => {     return { type: "ACTION_TWO"}   })   .catch(() => Observable.of({     type: CoreActionTypes.MY_ACTION_FAILED   })); 

Is it possible to have one action, be the source of two actions via a single effect?

like image 978
Lev Avatar asked Jan 17 '17 15:01

Lev


1 Answers

@Effect() loadInitConfig$ = this.actions$     .ofType(layout.ActionTypes.LOAD_INIT_CONFIGURATION)     .map<Action, void>(toPayload)     .switchMap(() =>         this.settingsService             .loadInitConfiguration()             .mergeMap((data: any) => [                 new layout.LoadInitConfigurationCompleteAction(data.settings),                 new meetup.LoadInitGeolocationCompleteAction(data.geolocation)             ])             .catch(error =>                 Observable.of(                     new layout.LoadInitConfigurationFailAction({                         error                     })                 )             )     ); 
like image 105
Javier González Avatar answered Oct 08 '22 12:10

Javier González