gpt4 book ai didi

angular - 如何终止@ngrx/effects 中的管道操作?

转载 作者:行者123 更新时间:2023-12-05 07:30:51 25 4
gpt4 key购买 nike

在下面的代码中,我从 Firestore 获取集合的长度。

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

@ngrx/effects 访问这个方法如下

@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 方法在检查用户是否存在后分派(dispatch)操作

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/effects 中的管道操作或任何其他方法请帮助我!

最佳答案

你什么时候做 switchMapstream1 到另一个 stream2 - 仔细检查你真的想听每一个 stream2 除了第一个 Action 。

看来解决方法是在effect中的inner stream中加入first()

关于angular - 如何终止@ngrx/effects 中的管道操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com