【问题标题】:How to prevent firestore snapshot, printing results too many times?如何防止firestore快照,打印结果太多次?
【发布时间】:2019-12-08 06:00:09
【问题描述】:

Firestore DocumentSnapshot 返回 54 个 DocumentId。我将每个 id 推入一个数组,但现在数组打印出 54 个数组,每个数组的索引都在增加。

我尝试过函数闭包,但得到相同的结果

 var newArray=[];
 this.afs.collection('users', ref => ref.where('machine', '==',true))
 .get()
 .subscribe((snapshot) => {
   snapshot.forEach(doc => {
     const dataNew = doc.id;
     newArray.push(doc.id)
     for (var i = 0; i < newArray.length; i++) {
       console.log(newArray[i]);
     }
  });
});

我希望数组为每个索引输出一次:

2JFH4NBvEIWB6B5gHuO5J3peI0h1
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
5IqWO1zlCAhTiFreUpUaejBqbNY2
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
5IqWO1zlCAhTiFreUpUaejBqbNY2
6V9R849TmBYQYiYbKgTiM1agVr92

【问题讨论】:

    标签: javascript arrays firebase google-cloud-firestore


    【解决方案1】:

    您的代码:

    1. 循环遍历文档
    2. 在每次迭代中,将文档添加到数组中
    3. 然后(仍在迭代中)循环遍历数组
    4. 打印每个文档

    在第一次迭代中,这将为您提供:

    • 文档 1

    第二次迭代:

    • 文档 1
    • 文档 2

    在第三次迭代中:

    • 文档 1
    • 文档 2
    • 文档 3

    而且由于你是一个接一个地运行这些,你会得到:

    • 文档 1
    • 文档 1
    • 文档 2
    • 文档 1
    • 文档 2
    • 文档 3

    为防止这种情况发生,请将内部循环移到外部迭代之外:

    snapshot.forEach(doc => {
      const dataNew = doc.id;
      newArray.push(doc.id)
    });
    for (var i = 0; i < newArray.length; i++) {
      console.log(newArray[i]);
    }
    

    【讨论】:

      【解决方案2】:

      snapshot.forEach 方法将对结果的每一行进行循环。

      您还在其中嵌套了自己的 for 循环。

      这意味着快照中的第一项将使用数组中的一项执行for 循环,然后第二项将使用数组中的两项执行它,第三项将使用数组中的三项,等等...

      您需要从forEach 中提取您的for 循环:

      var newArray=[];
      this.afs.collection('users', ref => ref.where('machine', '==',true))
          .get()
          .subscribe((snapshot) => {
              snapshot.forEach(doc => {
                  const dataNew = doc.id;
                  newArray.push(doc.id)
              });
             for (var i = 0; i < newArray.length; i++) {
                 console.log(newArray[i]);
             }
      });
      

      【讨论】:

        猜你喜欢
        • 2015-12-29
        • 1970-01-01
        • 2017-11-27
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-09
        相关资源
        最近更新 更多