【问题标题】:Bug in AngularFire 0.6 Causes unnecessary writes to firebase and might cause race conditionsAngularFire 0.6 中的错误导致对 firebase 的不必要写入并可能导致竞争条件
【发布时间】:2014-02-07 17:14:36
【问题描述】:

我遇到了一些奇怪的竞争条件和不必要的“设置”命令被触发并开始调查。我还没有破译所有 AngularFire 的内部方法来设置手表作为绑定的结果。但是,存储在 Firebase 中的对象似乎存在一个错误,这些对象之前设置了优先级。

AngularFire 的 watch 函数比较操作符永远不会匹配,因此会强制写入一个集合。这是因为以下代码在“本地”副本上运行:

// Parse a local model, removing all properties beginning with "$" and
// converting $priority to ".priority".
_parseObject: function(obj) {
  function _findReplacePriority(item) {
    for (var prop in item) {
      if (item.hasOwnProperty(prop)) {
        if (prop == "$priority") {
          item[".priority"] = item.$priority;
          delete item.$priority;
        } else if (typeof item[prop] == "object") {
          _findReplacePriority(item[prop]);
        }
      }
    }
    return item;
  }

这会导致 angular.equals 比较总是失败,因为 AngularFire 监视函数中使用的相等测试(作为 $bind 的结果)如下:

  // We're responsible for setting up scope.$watch to reflect local changes
  // on the Firebase data.
  var unbind = scope.$watch(name, function() {
    // If the new local value matches the current remote value, we don't
    // trigger a remote update.
    var local = self._parseObject(self._parse(name)(scope));
    if (self._object.$value &&
        angular.equals(local, self._object.$value)) {
      return;
    } else if (**angular.equals(local, self._object)**) {
      return;

我已为问题代码加注星标。对于具有预先存在的优先级的对象,这将始终评估为 false,因为 self._object 将具有“$priority”,而本地将具有“.priority”。

我认为代码应该是:

} else if (angular.equals(local,  self._parseObject(self._object))) {

我将添加解决此问题的代码,但希望 Firebase 团队确认该错误。很难理解没有人遇到过这种情况。此外,在 AngularFire 的代码中普遍将 $priority 转换为 .priority 的目的并不完全清楚。所以让我质疑我的分析。

-E

【问题讨论】:

  • 伟大的收获!将 $priority 重命名为 .priority 只是为了匹配 Angular 指南。我已经提交了一个错误来解决这个问题:github.com/firebase/angularFire/issues/248
  • 我添加了一个拉取请求...
  • 勇敢者+1(很难理解没有人遇到过这种情况)

标签: firebase angularfire


【解决方案1】:

已确认错误并完成拉取请求。所以我会回答我自己的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多