AngularFire2 v5 Firestore - 如何在“onSnapshot”上挂钩错误回调

时间:2017-11-22 15:32:31

标签: angularfire2

因此,Firestore文档/集合引用上的onSnapshot处理程序基本上是:

ref.onSnapshot(query => {}, error => {}, complete => {})

我不知道它是如何在AF2中连接起来的。 Firestore文档强调必须处理该回调中发生的各种错误。

它是否只是转换为RxJS中的等价物:

this.afDb.collection('my_collection')
   .valueChanges()
   .retry();

看到我的Angular 5服务是单例,我更喜欢他们的活动数据监听器(Observables)在测试期间由于错误而没有出错。这是主要关注点。

1 个答案:

答案 0 :(得分:1)

要实现重试,您需要捕获然后抛出错误。

export class AppComponent {
  constructor(afs: AngularFirestore) {
    afs.doc<{}>('items/three')
      .snapshotChanges()
      .map(action => action.payload.data())
      .catch(e => Observable.throw(e))
      .retry(2)
      .subscribe(
        snap => console.log(snap),
        err => console.log(err, 'Retried a few times')
      );
  }
}

在上面的示例中,我尝试在items/three收听不存在的文档。在不存在的.data()上调用.exists()之前调用DocumentSnapshot会引发错误。我.catch()然后抛出错误。使用.retry(2),RxJS将在.subscribe()方法中调用错误回调之前再尝试两次。