@Effect() public authenticate$ = this.actions$.pipe(
ofType(authenticationActions.AUTHENTICATE),
map(action => action.payload),
exhaustMap((auth: any) =>
this.authenticationService.authenticate(auth)
.map((data: TokenData) => {
return user: User = {
token: data.token,
username: 'dummy',
};
}).catch(error => { console.log(error); return Observable.throw(error);
}).pipe(
map(user =>new authenticationActions.AuthenticateSuccessAction(user))
)
);)
@Effect({ dispatch: false })
loginSuccess$ = this.actions$.pipe(
ofType(authenticationActions.AuthenticateSuccessAction),
tap(() => this.router.navigate(['/']))
);
Используйте выхлопную карту, а при отправке действия «AuthenticateSuccessAction» используйте другой эффект для перенаправления.
Лично мне нравится отделять все сервисы от эффектов, после чего вы можете использовать оператор catchError () после успешного входа в систему для отправки другого действия в случае сбоя входа в систему.
надеюсь, что это работает.PS: я не проверял этот ответ, но логика такая.