【问题标题】:Firebase get document length inside collectionFirebase 获取集合内的文档长度
【发布时间】:2020-11-15 00:01:30
【问题描述】:

我正在尝试获取我的收藏有多少个文档,以便在添加文档时设置下一个 ID。

我正在使用 angularfire 连接到 Firebase。 我有一项服务可以从 firebase 中获取价值

asignaturas.service.ts

addAsignatura() {
      return this.db.collection('asignaturas').valueChanges();
   }

asignaturas.component.ts

 onSend(){
    this.dbService.addAsignatura()
    .subscribe(data => {
      return this.size = data.length;
      
      
    });
    this.size = this.size + 1;
      this.docID = this.size.toString();
    this.dbService.getCollectionAsignaturas().doc(this.docID)
      .set({codigo: 12, nombre: 'xcssdf'});
   
  }

我在 html 中有一个按钮可以将此信息发送到 firebase,所以我尝试订阅 observable 并计算长度,我的问题是当我第一次单击按钮时,什么也没有发生,并且 count var没有更新,第二次点击时一切正常

【问题讨论】:

  • 您是否在 Chrome 开发者控制台的控制台或网络选项卡中看到任何错误?
  • 第一次单击按钮时,您正在触发订阅者,在这种情况下,它可能 this.size 是一个空值,然后当可观察对象结束并调用 subscribe 时,这将设置一个数字值。尺寸。这是第二次起作用的原因

标签: javascript firebase google-cloud-firestore angularfire


【解决方案1】:

由于您在“addAsignatura”中进行异步调用,因此在我们从该调用中获得结果之前,“this.size”的值不会更新。程序执行在此期间向前移动并执行其他语句。

为了实现所需的行为,请将剩余代码放在回调函数中,如下所示:

    onSend(){
       this.dbService.addAsignatura()
        .subscribe(data => {
            this.size = data.length;
            this.size = this.size + 1;
            this.docID = this.size.toString();
            this.dbService.getCollectionAsignaturas().doc(this.docID)
             .set({codigo: 12, nombre: 'xcssdf'});
  
       }); 
    }

【讨论】:

  • 感谢 Naveen Chahar,这帮助了我。但是我注意到我必须取消订阅,因为它在数据库中创建了数千条记录
  • 乐于助人!!此外,始终建议取消订阅以避免内存泄漏(尽管在某些情况下,您会在请求完成时自动取消订阅,但并非总是如此)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2018-07-15
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2021-07-01
  • 2021-11-16
相关资源
最近更新 更多