如何在@ngrx/效果中终止管道操作?



在下面的代码中,我从Firestore中获得了可观察到的集合长度。

getUserCartLength(uid:string){
return this.db.collection('users/'+uid+'/cart').valueChanges()
.pipe(
map(docs=>{return docs.length})
)
}

并且此方法由@ngrx/效果访问,如下所示

@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);
})
)
}),
)

在组件中,我使用 store 方法在检查用户是否存在后调度操作

ngOnInit() {
this.logService.isUserExist().subscribe(user=>{
if(user) this.store.dispatch(new fromUser.YesUserExist(user));
else this.store.dispatch(new fromUser.NoUser());
})
}

只要用户登录,一切正常。当用户注销时,它会抛出如下错误

core.js:1673 ERROR Error: Missing or insufficient permissions.

我对此错误的理解是管道操作仍在尝试访问数据库

有没有办法关闭 ngrx/效果中的管道操作或任何其他方法,请帮助我!

你什么时候从stream1switchMap到另一个stream2- 仔细检查你是否真的想听除第一个动作之外的每一个stream2动作。

似乎解决方案是在效果中向内流添加first()

相关内容

  • 没有找到相关文章

最新更新