Am new to Ngrx, We got stuck with the implementation , Need some help
Architecture: We are trying to fill the store when the User is authenticated by that time am trying to redirect.
Expectation: Effects should be called as async and In ui we have to do the redirect
Problem: Redirection to Homepage is happening only after the ngrx/effect api call is done.
this.userService.authenticateUser(this.userId.toUpperCase(), this.password, (user) => {
this.authenticatedUser = user;
//Call the ngrx dispatchMethod to fill the store
this.router.navigateByUrl("/home");
this.ngrxGetModule_data();
async ngrxGetModule_data() {
this.store.dispatch({ type: Affaire_Action.Affaire_Addstore_Login });
//this.store.dispatch({ type: Affaire_Action.Initial_Store });
}
@Effect()
updateAffaireStore$: Observable<Action> = this.actions$
.ofType(Affaire_Action.Affaire_Addstore_Login)
.map<Action, string>(toPayload)
.switchMap(res => this.affaireService.getAffairesSearchSuggetions('')
//.delay(10000)
.map(res => (
{
type: Affaire_Action.Affaire_on_Success, payload: ({ "parameter": SearchSuggestion, "data": res })
}
)))
.catch(error => Observable.of({ type: Affaire_Action.Affaire_on_Failure, payload: null }))
What are you actually trying with the
this.userService.authenticateUser
? Seems like you are trying to call the function but the way you are doing is wrong. What is the return type?!!! Observable or promise.Suggestion: You should call services on you effect and dispatch actions from effect. You can also use
this.router.navigateByUrl("/home");
on your effect.