AngularFirestore更新方法导致可观察对象触发两次



在我的angular项目中,我订阅了一个Firestore文档,如下所示:

const obs = this.db.collection('someCollection').doc('someDoc').valueChanges().subscribe(x=>console.log(x)); 

我只订阅了一个地方,我的模板中没有async管道。

当我直接写到Firebase这工作正确,我只收到一个日志。当我从AngularFirebase使用set方法时,我只收到一个日志。

this.db.collection('someCollection).doc('someDoc').set({value: 1});
//obs will log 'value:1'

但是当我使用更新方法时,我得到两个日志。

this.db.collection('someCollection').doc('someDoc').update({value: 1});
//obs will log 'value:1' two times. 

在我看来,这应该只记录一次。什么好主意吗?

我的问题的答案是,该值是乐观地更新本地(导致可观察对象着火),然后该值被推到Firestore,并被重新读取导致可观察对象再次着火。

我想出的方法是关闭网络,并且可观察对象只触发一次。

这也解释了为什么当我直接写入Firestore时,可观察对象只触发一次。

所以,如果你想让可观察对象只触发一次,你必须在可观察对象上放一个distinctUntilChanged()函数。

最新更新