AngularFire:如何“安全地”添加项目?

时间:2014-06-04 13:58:34

标签: angularjs firebase angularfire

我正试图安全地#34;将项目添加到我的Firebase"玩家"集合,即:检查远程错误(服务器关闭,链接断开......),以便能够通知用户所请求的添加操作的(临时)故障。

这是我目前的代码:

app.factory('playersFactory',
  function($firebase, FIREBASE_URL) {
    var url = FIREBASE_URL + '/' + 'players';
    var ref = new Firebase(url);
    var players = $firebase(ref);

    return {
      add: function(player) {
        return players.$add(player).then(
          function (ref) {
            var id = ref.name();
            console.error('SUCCESS: added player with id:', id);
            return id;
          },
          function (err) {
            console.error('ERROR:', err);
            return null;
          }
        );
      }
      // ...
    }
  }
);

我的问题是:

  • 我的代码有效吗? (我没有找到任何参考 - 我的错 - 当然 - 关于捕捉角火错误的建议方法......)。
  • 是我使用第二次回调$add(player).then(来捕获错误是否有效?我想它不是,因为我试图模拟在拔出网络电缆之前拔掉网络电缆,并且没有显示ERROR ...
  • 是否真的需要使用firebase来捕获这些错误?

1 个答案:

答案 0 :(得分:1)

这种方法看起来是正确的。 $ add是添加项目的理想方式,您希望它们按时间顺序反刍,并具有独特的ID。正如您所发现的那样,应使用then()来捕获错误。

请注意,您只是因为拔下网线而未能生成错误。 Firebase具有容错功能,可以在本地应用更改,等待连接恢复,然后再发送到服务器。通过设置防止写入相关路径的安全规则,最好创建错误条件。

 ".write": "!newData.child('shouldFail').exists()" // for example

您可能还想查看MockFirebase。它并未在各方面都完整,也没有完整记录,但用于测试AngularFire。与其他Angular模拟(例如$ http)一样,它通过使用flush()方法自行决定触发回调,允许您在事件触发时进行复杂控制,以可控方式模拟异步。还有一个failNext方法,它目前仅适用于set(),但是需要几分钟才能添加到您需要使用的任何其他方法。

相关问题