rxjs делать в эффектах

#angular #rxjs #ngrx #ngrx-effects

#угловатый #rxjs #ngrx #ngrx-эффекты

Вопрос:

Я изучаю angular и использую Effects его. У меня есть код выхода из системы, и он работает нормально. Но моя проблема в том, что при использовании кода ниже он не перемещается.

 @Effect({ dispatch: false })
authLogOut = this.actions$
    .pipe(ofType(AuthActions.LOGOUT))
    .pipe(tap(() => {
        this.router.navigate(['']);
    }))
 

AuthActions.ts

 export const TRY_SIGNIN = 'TRY_SIGNIN';
export const LOGOUT = 'LOGOUT';
export class Logout implements Action {
     readonly type = LOGOUT;
}
export class TrySignin implements Action {
    readonly type = TRY_SIGNIN;
   constructor(public payload: { username: string, password: string }) {

  }
}
export type AuthActions =  Logout | Signin
 

Но когда я подписываюсь, навигация работает нормально.

 @Effect()
authSignin = this.actions$
    .pipe(ofType(AuthActions.TRY_SIGNIN))
    .pipe(map((action: AuthActions.TrySignin) => {
        return action.payload;
    }))
    .pipe(switchMap((authData: { username: string, password: string }) => {
        return from(firebase.auth().signInWithEmailAndPassword(
            authData.username, authData.password));
    }))
    .pipe(switchMap(() => {
        return from(firebase.auth().currentUser.getIdToken())
    }))
    .pipe(mergeMap((token: string) => {
        this.router.navigate(['']);
        return [
            {
                type: AuthActions.SIGNIN
            },
            {
                type: AuthActions.SET_TOKEN,
                payload: token
            }
        ]
    }))
    ;
 

Ответ №1:

Вам не нужен второй канал.

 .pipe(
    ofType(AuthActions.LOGOUT),
    tap(() => {
        this.router.navigate(['']);
    })
)
 

Ответ №2:

После стольких часов поисков моей проблемы. Я решаю это, проверяя свою маршрутизацию. Я случайно поставил защиту в свой маршрутизатор, который указывает на этот URL.