【发布时间】:2017-08-07 22:19:01
【问题描述】:
我在这个例子中用测试数据填充了一个数组,所以我知道 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)
第二个日志返回未定义,最后一个日志返回 0 作为长度。我通过推送值来确保它不会变得具有关联性。现在不可能是因为它在区域中运行,因为第一个控制台日志给了我正确的表示。怎么回事?
【问题讨论】:
-
什么是
ref.limitToLast(1)? -
这是对 firebase 的调用,为我提供了 firebase 数据库模型的最后一个条目。在此示例中,我没有对 firebase 数据做任何事情,但仍然显示该函数,因为它确实在其中推送值
-
附注:请注意
this的嵌套箭头功能。箭头函数将this引用绑定到词法范围,这可能是嵌套箭头函数的问题。 -
您的 on("child_added"... zone.run(...) 是否有可能在您的 console.log() 之后运行?看起来这是一个事件驱动的系统,这取决于在它之后的代码之前运行的事件。
标签: javascript arrays angular firebase