因此,Firestore文档/集合引用上的onSnapshot处理程序基本上是:
ref.onSnapshot(query => {}, error => {}, complete => {})
我不知道它是如何在AF2中连接起来的。 Firestore文档强调必须处理该回调中发生的各种错误。
它是否只是转换为RxJS中的等价物:
this.afDb.collection('my_collection')
.valueChanges()
.retry();
看到我的Angular 5服务是单例,我更喜欢他们的活动数据监听器(Observables)在测试期间由于错误而没有出错。这是主要关注点。
答案 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()
方法中调用错误回调之前再尝试两次。