【发布时间】:2016-01-22 07:30:14
【问题描述】:
我在 angularfire 上遇到了同步数组的问题。我在 angularfire 1.1.3 和 firebase 2.3.1 上。 我有一个问题
var arr = $firebaseArray(ref.limitToFirst(5));
到目前为止我看到的行为是当我打电话时
arr.$remove(0)
查询将返回的下一个对象会自动加载到同步数组中。这实质上使数组成为查询响应上的滑动窗口 - 它始终具有相同数量的元素。
自上周以来,这种行为似乎发生了变化,我得到了两种不同的情况:
1:arr 确实加载了 5 个项目,但在调用 arr.$remove 五次后,数组为空 - 这在 JavaScript 数组上是正常行为,但不是我所看到的之前在 AngularFire 同步数组上。
2:或arr 已加载但随后消失,即在代码中:
arr.$loaded(function(){
\\ break
})
如果我中断回调,arr 确实有五个项目,对应于 Firebase 上的数据,但在 Angular 摘要循环结束时,arr 是一个空数组。
演示: This plunker 显示行为 1
所以我的问题是:
- 我依赖的行为不是 API 的正式组成部分吗?
- 这种行为有改变吗?
- 什么解释了最后一点(firebase 数组在
$loaded上有项目但最终为空?)
更新
似乎行为 2 发生在行为 1 之后 - 更准确地说:在到达一个空的同步数组之后,如果我重新加载页面,那么我在 arr.$loaded 的回调中得到一个非空数组,但最后是一个空数组.
这是否意味着firebase本身会“卡住”?
我会尝试在 plunker 中重现它。
【问题讨论】:
-
这看起来与 AngularFire 无关。显然,AF 行为的改变至少需要改变 Angular 或 AF 版本的库。我的猜测是 SDK 中的回归。没有所有额外组件的最小重现(即仍然重现错误的最小占用空间)将非常有帮助。
-
@Kato 您对 plunker 有何看法 - 它显示了当前行为($firebaseArray 中没有重新加载任何内容)。这种行为是预期的,还是对于
ref.limitToFirst(3).on(...)查询,数组是否应该始终包含三个元素(至少在看到该位置的所有项目之前)? -
@AdrienF 这实际上看起来像一个错误。我们有一个修复排队,并将部署它。一旦完全部署,我将更新这个问题的答案。感谢举报,不便之处敬请见谅!
-
@GregSoltis 感谢您的快速回复 - 您对时间(或范围)有一个粗略的估计吗?
-
我不能保证,但我们将在下周初拍摄。
标签: javascript angularjs firebase angularfire