Angular firebase和可观察的错误处理

问题描述 投票:0回答:1

我正在努力了解如何在使用下面的代码时为角度firebase添加一些错误检测。当新用户登录我的网站时,他们对数据库没有任何权限,并且控制台中会抛出错误。

我只是试图得到它,以便如果抛出此错误,auth.isApproved将返回false,此时它不会返回。我已经尝试将.catch添加到.switchMap,但是没有用。

控制台出错:

未捕获错误:permission_denied at / authorization / users / VAST9WnazFUc6u9PQ5x74bOPIsJ2:客户端无权访问所需数据。

消费组件:

this.auth.isApproved().subscribe(approved => {
  console.log (approved);

AuthService(auth):

isApproved(): Observable<boolean> {
    return this.user$
    .switchMap(user => this.DataService.getSharesDBUser(user.uid).valueChanges())
    .map(appUser => appUser.isApproved)
  }

DataService(DataService)

getSharesDBUser(userUID : string ): AngularFireObject<firebaseDBUser> {
    return this.db.object('/authorization/users/' + userUID);
  }

接口

export interface firebaseDBUser {
  isAdmin                  : boolean;
  isApproved               : boolean;
  name                     : string;
}
angular typescript firebase firebase-realtime-database observable
1个回答
1
投票

我的第一个猜测是在catch内部observable上添加一个switchMap运算符,但是你说它不起作用:/

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应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.