Firestore中的更新导致无限循环

时间:2017-11-03 13:47:17

标签: angular google-cloud-firestore

我目前正在尝试使用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});
    });
  }

正如您所看到的,我也在同一个数据库中添加了一个项目,但我也批评了该部分,它仍然导致数据库中的无限循环。出现这种情况的原因以及如何解决这个问题?我也使用谷歌浏览器作为我的网络浏览器进行开发。不知道这是否有所作为

1 个答案:

答案 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});
    });
}

假设您对此文档的订阅时间较长,则应该自动反映更新。

请注意,根据您的应用程序所做的操作,您可能需要等待这些调用(或以其他方式处理承诺