Angular 为什么角度ngx效应不';如果失败一次,它就不能工作了?

Angular 为什么角度ngx效应不';如果失败一次,它就不能工作了?,angular,ngrx,Angular,Ngrx,我使用角度6和Ngrx效果。 这是一个登录效果 @Effect({dispatch: false}) login$ = this.actions$.pipe( ofType<Login>(AuthActionTypes.Login), tap(action => { localStorage.setItem(environment.authTokenKey, action.payload.authToken); console.l

我使用角度6和Ngrx效果。 这是一个登录效果

@Effect({dispatch: false})
login$ = this.actions$.pipe(
    ofType<Login>(AuthActionTypes.Login),
    tap(action => {
        localStorage.setItem(environment.authTokenKey, action.payload.authToken);
        console.log('login effect');
        this.store.dispatch(new UserRequested());
    }),
);
@Effect({dispatch:false})
登录$=此.actions$.pipe(
ofType(AuthActionTypes.Login),
点击(操作=>{
setItem(environment.authTokenKey,action.payload.authToken);
log(“登录效果”);
this.store.dispatch(new userrequired());
}),
);
它发送了用户请求效果

@Effect({dispatch: false})
loadUser$ = this.actions$
.pipe(
    ofType<UserRequested>(AuthActionTypes.UserRequested),
    withLatestFrom(this.store.pipe(select(isUserLoaded))),
    filter(([action, _isUserLoaded]) => !_isUserLoaded),
    mergeMap(([action, _isUserLoaded]) => this.auth.getUserByToken()),
    tap(data => {
        console.log('login effect');
        if (data) {
            this.store.dispatch(new UserLoaded({ user: data['user'] }));
            localStorage.setItem('options', JSON.stringify(data['options']));
            // localStorage.setItem("permissions", data['user'].permissions_list);
            data['user'].permissions_list.forEach((item) => {
                this.permissionsService.addPermission(item.name);
            });
        } else {
            this.store.dispatch(new Logout());
        }
    }, error => {
        this.store.dispatch(new Logout());
    })
  );
@Effect({dispatch:false})
loadUser$=this.actions$
.烟斗(
ofType(AuthActionTypes.UserRequested),
withLatestFrom(this.store.pipe(select(isUserLoaded))),
过滤器(([action,\u isUserLoaded])=>!\u isUserLoaded),
mergeMap(([action,_isUserLoaded])=>this.auth.getUserByToken()),
点击(数据=>{
log(“登录效果”);
如果(数据){
dispatch(新用户加载({user:data['user']}));
localStorage.setItem('options',JSON.stringify(data['options']);
//setItem(“权限”,数据['user'].permissions\u列表);
数据['user'].权限列表.forEach((项)=>{
this.permissions服务.addPermission(item.name);
});
}否则{
this.store.dispatch(new Logout());
}
},错误=>{
this.store.dispatch(new Logout());
})
);

如果此效果被调用并且在不再调用之前至少失败一次。为什么?

因为需要控制流。如果流有错误,它将按预期停止

如果您不希望它停止,请考虑使用<代码> CaskError < /Cult>运算符,同时使用<代码> SpUpRebug 函数,或者简单地捕获订阅中的错误。 现场观看:

不工作

rxjs.throwerr(“模拟错误”)
.订阅(
()=>console.log('您不应该看到此消息'),
)