角度火:如何"safely"添加项目?



我正在尝试"安全地"添加一个项目到我的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(捕捉错误是有效的吗?我想它不是,因为我试图模拟在"添加"之前拔掉网络电缆的失败,并且没有显示错误…
  • 用firebase捕获这些错误的努力是真正需要的吗?

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

注意,您不会因为拔掉网线而产生错误。Firebase是容错的,将在本地应用更改,等待连接恢复后再发送到服务器。您最好通过设置一个安全规则来创建一个错误条件,以防止对有问题的路径进行写操作。

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

你可能还想看看MockFirebase。它在每个方面都不完整,也没有完整的文档,但用于测试AngularFire。像其他Angular模拟(比如$http)一样,它的工作原理是使用flush()方法来根据你的判断触发回调,允许你复杂地控制事件何时触发,以可控的方式模拟异步。还有一个failNext方法,目前只在set()上起作用,但要将其添加到需要使用的任何其他方法中需要几分钟的工作。

相关内容

  • 没有找到相关文章

最新更新