我目前正在尝试使用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});
});
}
正如您所看到的,我也在同一个数据库中添加了一个项目,但我也批评了该部分,它仍然导致数据库中的无限循环。出现这种情况的原因以及如何解决这个问题?我也使用谷歌浏览器作为我的网络浏览器进行开发。不知道这是否有所作为
答案 0 :(得分:0)
我很难对此进行测试,但您可以添加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});
});
}
假设您对此文档的订阅时间较长,则应该自动反映更新。
请注意,根据您的应用程序所做的操作,您可能需要等待这些调用(或以其他方式处理承诺