在下面的代码中,我从Firestore获得了集合的长度。
clickReload(id: number) {
if(id == this.activatedRoute.snapshot.params.id) {
window.location.reload(); //if id is same then just reload the page
} else {
this.router.navigate(['article', id]);
}
}
@ ngrx / effects按如下方式访问此方法
getUserCartLength(uid:string){
return this.db.collection('users/'+uid+'/cart').valueChanges()
.pipe(
map(docs=>{return docs.length})
)
}
在组件中,我正在使用store方法在检查用户是否存在后调度动作
@Effect()
userExist$ = this.actions$.ofType(UserAuthTypes.YES_USER_EXIST).pipe(
map((action:YesUserExist)=>action.user),
switchMap((user)=>{
return this.userService.getUserCartLength(user.uid)
.pipe(
map(length=>{
console.log(length);
return new InitializeUserCart(length);
})
)
}),
)
只要用户登录,一切正常。用户注销后,将引发如下错误
ngOnInit() {
this.logService.isUserExist().subscribe(user=>{
if(user) this.store.dispatch(new fromUser.YesUserExist(user));
else this.store.dispatch(new fromUser.NoUser());
})
}
我对此错误的理解是,管道操作仍在尝试访问数据库
是否有任何方法可以关闭ngrx / effects中的管道操作或任何其他方法,请帮帮我!
答案 0 :(得分:0)
何时从switchMap
到另一个stream1
进行stream2
-仔细检查您是否真的想听除第一个动作之外的每个stream2
动作。
似乎解决方案是在效果中向内部流添加first()
。