我在这个例子中填充了一个带有测试数据的数组,所以我知道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作为长度。我确保通过推动它不会成为关联的值。现在它不可能是因为它在区域中运行,因为第一个控制台日志为我提供了正确的表示。发生了什么事?
答案 0 :(得分:1)
这是期望aync
为sync
的组合以及显示参考数组的chrome开发人员工具。
ref.limitToLast(1).on
使整个'添加'进程异步,这意味着当您记录数组时,其中没有元素,因为异步部分尚未触发。通过在console.log
上方放置this.lastMessages.push
来检查它。您将看到“添加”的记录在记录数组
它显示3个项目的原因是因为浏览器优化。请阅读here了解详情