为什么我的调度员只发射一次ngrx
我有一个登录流设置。假设我有这样一个场景,用户用错误的凭据单击登录按钮,我发送一个登录操作,并期望API产生错误的结果,我在UI中用错误处理程序显示错误,用户放入新的凭据,但这些凭据仍然不正确,我应该能够重复上述过程 对我来说,这是不可能的。调度员只开火一次。我是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)
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))
)
),
);