我正在努力理解如何在使用下面的代码时向 angular firebase 添加一些错误检测。当新用户登录我的网站时,他们对数据库没有任何权限,并且控制台中会抛出错误。
我只是想得到它,以便如果抛出此错误 auth.isApproved 返回 false,此时它不会返回。我试过向 .switchMap 添加一个 .catch ,但没有奏效。
控制台中的错误:
未捕获的错误:permission_denied at /authorization/users/VAST9WnazFUc6u9PQ5x74bOPIsJ2:客户端无权访问所需数据。
消费组件:
this.auth.isApproved().subscribe(approved => {
console.log (approved);
AuthService(授权):
isApproved(): Observable<boolean> {
return this.user$
.switchMap(user => this.DataService.getSharesDBUser(user.uid).valueChanges())
.map(appUser => appUser.isApproved)
}
数据服务(DataService)
getSharesDBUser(userUID : string ): AngularFireObject<firebaseDBUser> {
return this.db.object('/authorization/users/' + userUID);
}
界面
export interface firebaseDBUser {
isAdmin : boolean;
isApproved : boolean;
name : string;
}
我的第一个猜测是catch
在switchMap
内部 observable上添加一个运算符,但您说它不起作用:/
isApproved(): Observable<boolean> {
return this.user$.switchMap(user =>
this.DataService.getSharesDBUser(user.uid).valueChanges()
.map(appUser => appUser.isApproved)
.catch(() => Observable.of(false))
)
}
如果catch
操作符无法捕捉到这个错误,那应该是因为错误不是在valueChanges
可观察链内部触发的,也许它就在之前,在this.db.object(...)
函数调用中。在这种情况下,一个简单try-catch
的调用应该可以解决问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句