数组长度为0,但有项目

时间:2017-08-07 14:14:38

标签: javascript arrays angular firebase

我在这个例子中填充了一个带有测试数据的数组,所以我知道firebase数据不是责备。

this.lastMessages = new Array();

ref.limitToLast(1).on("child_added", (snapshot) => {
   this.zone.run(() => {
       this.lastMessages.push("test");
   });
});

console.log(this.lastMessages);
console.log(this.lastMessages[1]);
console.log(this.lastMessages.length);

在这个例子中,我只是推动值" test"进入lastMessages数组以使其更容易。现在我在底部有3个日志,这会产生奇怪的结果。

第一个按预期记录:

[]
0: "test"
1: "test"
2: "test"
length: 3
__proto__: Array(0)

第二个日志返回undefined,最后一个日志返回0作为长度。我确保通过推动它不会成为关联的值。现在它不可能是因为它在区域中运行,因为第一个控制台日志为我提供了正确的表示。发生了什么事?

1 个答案:

答案 0 :(得分:1)

这是期望ayncsync的组合以及显示参考数组的chrome开发人员工具。

ref.limitToLast(1).on使整个'添加'进程异步,这意味着当您记录数组时,其中没有元素,因为异步部分尚未触发。通过在console.log上方放置this.lastMessages.push来检查它。您将看到“添加”的记录在记录数组

之后完成

它显示3个项目的原因是因为浏览器优化。请阅读here了解详情