为什么我的调度员只发射一次ngrx

为什么我的调度员只发射一次ngrx,ngrx,ngrx-store,ngrx-effects,Ngrx,Ngrx Store,Ngrx Effects,我有一个登录流设置。假设我有这样一个场景,用户用错误的凭据单击登录按钮,我发送一个登录操作,并期望API产生错误的结果,我在UI中用错误处理程序显示错误,用户放入新的凭据,但这些凭据仍然不正确,我应该能够重复上述过程 对我来说,这是不可能的。调度员只开火一次。我是ngrx新手,不确定哪里做错了,但以下是我的代码: 登录方式: logInUser(user: User) { this.store$.dispatch(new fromUserActions.LoginUser(user)

我有一个登录流设置。假设我有这样一个场景,用户用错误的凭据单击登录按钮,我发送一个登录操作,并期望API产生错误的结果,我在UI中用错误处理程序显示错误,用户放入新的凭据,但这些凭据仍然不正确,我应该能够重复上述过程

对我来说,这是不可能的。调度员只开火一次。我是ngrx新手,不确定哪里做错了,但以下是我的代码:

登录方式:

logInUser(user: User) {    
  this.store$.dispatch(new fromUserActions.LoginUser(user));
  this.actions$.ofType(fromUserActions.LOGIN_USER_FAIL);
}
副作用:

@Effect()
loginUser$ = this.actions$
    .pipe(
        ofType(fromUserActions.LOGIN_USER),
        map((action: fromUserActions.LoginUser) => action.payload),
        switchMap(payload => this.userService.loginUser(payload)),
        map((user) => fromUserActions.LoginUserSuccess(user)),
        catchError((error) => of(new fromUserActions.LoginUserFail(error.message)))
    );
失败操作:

export class LoginUserFail implements Action {
   readonly type = LOGIN_USER_FAIL;

 constructor(public payload: any) { }
}
下面是redux开发工具的屏幕截图。正如您所看到的,第一次操作登录和失败都正常工作,之后只有登录操作触发


您必须捕获内部可观察的
this.userService.logiuser(有效负载)
上的错误

问题是这个.actions$的类型(来自useractions.LOGIN\u USER\u FAIL)。把它拿走

logInUser(user: User) {    
  this.store$.dispatch(new fromUserActions.LoginUser(user));
  this.actions$.ofType(fromUserActions.LOGIN_USER_FAIL); <--- Remove
}

在登录失败的情况下,您的商店如何改变?
    @Effect()
    loginUser$ = this.actions$
    .pipe(
        ofType(fromUserActions.LOGIN_USER),
        map((action: fromUserActions.LoginUser) => action.payload),
        switchMap(
            payload => this.userService.loginUser(payload).pipe(
                map((user) => new fromUserActions.LoginUserSuccess(user)),
                catchError((error) => new fromUserActions.LoginUserFail(error.message))
            )
        ),

    );