【问题标题】:Iterate through array from Firestore从 Firestore 遍历数组
【发布时间】:2018-07-25 12:23:00
【问题描述】:

我正在尝试遍历从 Cloud Firestore 检索到的数组。该数组是集合“arbeidsokter”中文档中的一个字段。为了检索数据,我使用以下代码。

this.afd.collection<Items>('arbeidsokter').doc(this.planNext[0]["ID"])
      .valueChanges()
      .forEach((data) => oldTimestamps.push(data["Stempletider"]));

console.log(oldTimestamps);

这给了我一个数组,但它的长度为零,即使看起来时间戳已被推送到它(see screenshot)。如何访问数组中的时间戳?

编辑: Image of the document

EDIT2: Screenshot of code

【问题讨论】:

  • 您能提供您文档的屏幕截图吗?
  • 当然!屏幕截图未添加到问题中。

标签: javascript angular firebase google-cloud-firestore


【解决方案1】:
Object.values(Stempletider).map((item) => console.log(item));

将帮助您循环播放。

【讨论】:

  • 谢谢! Object.values() 似乎在 typescript 中不起作用,因为我收到错误 'Property 'values' does not exist on type 'ObjectConstructor'。试过 Object.keys(oldTimestamps).map(key =&gt; console.log(oldTimestamps[key])); 但它没有返回任何值。
  • 嘿,我在打字稿中使用了同样的东西,它对我有用
  • 当然!添加到 EDIT2 下的问题中。
  • 我无法弄清楚为什么会发生这种情况,但就我而言,它允许在 typescript 中使用 Object.values
【解决方案2】:

也许您在推入数据之前正在打印数据?价值变化是同步的吗?

至少在带有 firestore get() 的 Vanilla JS 中返回一个 Promise,因此尝试访问下一行代码中的数据(不在 Promise .then() 中)将返回一个空对象。

似乎获得了您需要在 forEach 中打印该对象或对那里的数据执行某些操作所需的结果。

【讨论】:

  • 嗯...我将代码更改为this.afd.collection&lt;Items&gt;('arbeidsokter').doc(this.planNext[0]["ID"]) .valueChanges().subscribe((data) =&gt; oldTimestamps.push(data)); console.log(oldTimestamps); 现在,一个数组被写入控制台,就像这个屏幕截图link 一样,但console.log(oldTimestamps[0]) 仍然返回未定义。
  • console.log(oldTimestamps[0])也在foreach里面?我的意思是,这行得通吗:this.afd.collection&lt;Items&gt;('arbeidsokter').doc(this.planNext[0]["ID"]) .valueChanges().subscribe((data) =&gt; oldTimestamps.push(data)); console.log(oldTimestamps[0]);
  • 对不起!由于截止日期很短,我不得不优先考虑应用程序的其他部分。当我有时间进一步研究时会在这里发布:)
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多