2017-08-22 60 views
0

我试图用捕捉方法可以捕捉到火力地堡/ AngularFire授权错误,但我得到一个错误Property 'catch' does not exist on type 'FirebaseListObservable<any[]>'.授权错误与FirebaseListObservable

的问题是,当我没有访问基于对一些数据处理认证规则。当我通过身份验证时,代码将工作(没有.catch,因为这是一个编译错误)。

Records: FirebaseListObservable<any[]>; 

constructor(public afAuth: AngularFireAuth, public af: AngularFireDatabase) 
{ 
    try { 
     this.user = afAuth.authState; 
     this.Records = af.list('/Testing'); 
    } 
    catch (e) { 
     console.log((<Error>e).message);//conversion to Error type 
    } 
} 

以上将工作。但是,如果由于身份验证规则而导致/Testing无法访问,则会发生异常。我似乎无法用标准的try/catch来捕捉这个错误。虽然我看到了使用catch的参考,但是,

 this.Records = af.list('/Testing').catch(e => { 
      console.log((<Error>e).message);//conversion to Error type 
     }); 

但是,这给出了上面的编译错误。

尽管我知道我可以更改Firebase读取权限以允许任何人读取数据,但我试图处理此错误情况,以使我的代码更安全,以防有人得到部分应用程序试图处理数据,但安全性不允许他们访问数据。

回答

0

我不知道为什么catch不起作用,但你可以尝试这样的事情。 subscribe的第二个参数是错误处理的参数,订阅必须存在于observable上。

af.list('/Testing').subscribe(()=>{}, (err)=>{console.log(err)}) 
+0

这也给出了一个错误:类型'Subscription'不能分配到类型'FirebaseListObservable '。属性'$ ref'缺少'Subscription'类型。' –

+0

呵呵。我希望能够发挥作用。希望有一个比我更有见识的人出现并且给你一只手,因为我不知道。抱歉。 – TheCog

+0

没问题,谢谢。尽管如此,你让我走上正轨。我使用它来查找另一个来源,指示我不应将结果直接分配给FirebaseListObject,而是将它们推入。这适用于直接向前数组,但不适用于结构化数据数组。我正在进一步调查。 –