Firestore实时侦听器在文档中的值更新后返回未定义

时间:2018-11-28 21:54:23

标签: javascript firebase google-cloud-firestore

在我的应用中,我有一个名为列表的现有集合。我也有这样的实时监听器(功能1):

firebase.firestore().collection('lists').doc(listId)
.onSnapshot(listSnapshot => {
  if (listSnapshot.exists) {
    // Do something
  }
});

在其他地方,我具有用于更新集合中每个列表的功能(功能2):

firebase.firestore().collection('lists').get()
.then(querySnapshot => {
  querySnapshot.forEach(docSnapshot => {
  firebase.firestore().collection('lists').doc(docSnapshot.id).update({ modDate: Date.now() });
  });      
});

在大多数情况下,应用程序启动时会调用功能1。在这种情况下,侦听器将返回与listId对应的文档。然后,在稍后的某个时间,当通过功能2更新该文档时,该功能将导致再次触发功能1侦听器,并返回与listId相对应的文档的更新值。那是所有预期的行为。

但是,有时偶尔会在启动过程中实际上在功能1之前或与功能1并发调用功能2。在那种情况下,通过功能2更新现有文档会导致功能1触发,但是对于与listId对应的文档,返回未定义的值(例如listSnapshot.exists为false)。现在,如果严格来说是竞争条件,我可以看到函数1返回与listId对应的文档的旧值。但是我根本没有任何值,这是在文档被删除(未更新)时通常发生的情况。

我可以修改逻辑,以确保功能2仅在前者之后运行,但我想了解问题的根源。

0 个答案:

没有答案