首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止firestore快照,打印结果次数过多?

如何防止firestore快照,打印结果次数过多?
EN

Stack Overflow用户
提问于 2019-07-31 03:06:13
回答 2查看 36关注 0票数 0

Firestore DocumentSnapshot返回54个文档id,我把每个id放入一个数组,但现在数组打印出54个数组,每个数组的索引都在递增。

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

代码语言:javascript
复制
 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]);
     }
  });
});

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

代码语言:javascript
复制
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
5IqWO1zlCAhTiFreUpUaejBqbNY2
2JFH4NBvEIWB6B5gHuO5J3peI0h1
2vslBGmfMtUsTt7EZWTvBsqLTjg1
53UQPRDjHZZjyA6UsQvr8TbgY372
5IqWO1zlCAhTiFreUpUaejBqbNY2
6V9R849TmBYQYiYbKgTiM1agVr92
EN

回答 2

Stack Overflow用户

发布于 2019-07-31 03:14:52

你的代码:

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

>G29>

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

  • Document 1

在第二次迭代中:

  • 文档%1
  • 文档% 2

在第三次迭代中:

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

由于您是一个接一个地运行这些程序,您会得到:

  • Document 1
  • Document 1
  • Document 2
  • Document 1
  • 文档2

H139文档3 H240F241

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

代码语言:javascript
复制
snapshot.forEach(doc => {
  const dataNew = doc.id;
  newArray.push(doc.id)
});
for (var i = 0; i < newArray.length; i++) {
  console.log(newArray[i]);
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-31 03:15:02

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

这意味着快照中的第一个项目将对数组中的1个项目执行for循环,然后第二个项目将在数组中执行2个项目,第三个项目将执行3个项目,依此类推。

代码语言:javascript
复制
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]);
       }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57278510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档