因此,我尝试在firestore
中更新文档,并在.forEach
中进行此操作,并且在执行更新时会导致无限循环。有人可以看一下我的代码并告诉我如何停止它吗?我认为它只会运行一次,因为快照大小仅为1。
this.categoriesCollection.ref.where('name', '==',
transaction.category.toLowerCase()).limit(1).onSnapshot((querySnapshot) =>
{
if (querySnapshot.size == 1) {
querySnapshot.forEach((doc) => {
this.categoriesCollection.doc(doc.id)
.update({totalSpent: doc.data().totalSpent + transaction.amount});
});
}
});
答案 0 :(得分:1)
您要在搜索查询中添加一个侦听器,以返回一个文档,然后对该文档进行更改。更改该文档后,查询结果将更改,并使用新结果再次调用您的侦听器,这意味着它将更新另一个文档,这意味着查询将更改。等等
如果您只想通过查询更新文档,请不要使用onSnapshot()
。只需使用get()
一次获得搜索结果,然后从搜索结果中更新文档即可。
答案 1 :(得分:0)
我发现我要做的就是将整个事情都设置为一个变量,然后在闭包结束时只需调用unsubscribe();
即可停止循环。所以我的代码现在是:
let unsubscribe = this.categoriesCollection.ref.where('name', '==', transaction.category.toLowerCase()).limit(1).onSnapshot((querySnapshot) => {
if (querySnapshot.size == 1) {
querySnapshot.forEach((doc) => {
this.categoriesCollection.doc(doc.id).update({totalSpent: doc.data().totalSpent + transaction.amount});
});
}
});
unsubscribe();