我目前正在尝试使用 Angular 4 在 Firestore 中设置一个计数器,每当人们单击特定按钮时就会更新。单击该按钮确实会更新计数器,但它会启动无限循环。停止它的唯一方法是注释掉无济于事的行,因为每次我决定单击该按钮时都需要更新计数器。这是代码。
addFoodToCart(uid: string, email: string, item: Goods)
{
this.getUserInDB(email).doc(uid).valueChanges().subscribe(a =>
{
this.getUserInDB(email).doc(uid).collection('cart').add(item);
this.getUserInDB(email).doc(uid).update({'food': ++a['food'], 'technology': 0, 'email': email});
});
}
如您所见,我也在向同一数据库添加一个项目,但我也将该部分注释掉了,它仍然会导致数据库中的无限循环。发生这种情况的任何原因以及如何解决它?我也使用谷歌浏览器作为我的网络浏览器进行开发。不知道这是否有区别
我很难对此进行测试,但您可以添加 take()
运算符以在单个返回值后取消连接订阅:
addFoodToCart(uid: string, email: string, item: Goods)
{
this.getUserInDB(email).doc(uid).valueChanges().take(1).subscribe(a =>
{
this.getUserInDB(email).doc(uid).collection('cart').add(item);
this.getUserInDB(email).doc(uid).update({'food': ++a['food'], 'technology': 0, 'email': email});
});
}
假设您有此文档的较长订阅连接到其他地方,则更新应自动反映。
请注意,根据应用的功能,您可能需要等待这些调用(或以其他方式处理承诺)