注销点击时Angular / ngrx应用程序中断

时间:2018-03-08 08:57:29

标签: javascript angular ngrx ngrx-effects

我一直试图解决这个问题4-5天,但仍无法找到问题的原因。

正如标题所说,每次点击退出按钮应用程序浏览器冻结时,都无法关闭标签,为了再次运行应用程序,我必须打开另一个应用程序或通过任务管理器关闭浏览器。

我认为问题在于ngrx/effect,我用它来清除localstorage

就是这样:



@Effect() logout$: Observable<Action> = this.actions$
        .ofType(fromActions.LOGOUT)
        .pipe(
            tap((action: fromActions.Logout) => {
                return this.authService.logout();
            }))
&#13;
&#13;
&#13;

以下是方法:

&#13;
&#13;
logout() {
    localStorage.clear();
  }
&#13;
&#13;
&#13;

并且令牌仍然存在,操作未调度,我检查了操作,没​​有类型错误..

这是两张照片,在点击退出之前和之后: Not clicked Logout clicked

编辑: 行动派遣:

&#13;
&#13;
onLogout() {
    this.store.dispatch(new fromActions.Logout());
  }
&#13;
&#13;
&#13;

减速器:

&#13;
&#13;
case AuthActions.LOGOUT: {
            return {
                ...state,
                loading: false,
                loggedIn: false
            }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

在你的效果中,你将返回Logout动作,无限循环。

尝试创建LogoutSuccess操作,并在Logout成功时将其返回。

... .pipe(
tap((action: fromActions.Logout) => {
  return this.authService.logout();
}),
map(() => { return {type: 'NO_ACTION'}; })