Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs AngularFire:如何;“安全地”;添加项目?_Angularjs_Firebase_Angularfire - Fatal编程技术网

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

Angularjs AngularFire:如何;“安全地”;添加项目?,angularjs,firebase,angularfire,Angularjs,Firebase,Angularfire,我正在尝试“安全地”将一个项目添加到我的Firebase“玩家”集合中,即:检查远程错误(服务器关闭、链接关闭等),以便能够通知用户请求的添加操作(临时)失败 这是我当前的代码: app.factory('playersFactory', function($firebase, FIREBASE_URL) { var url = FIREBASE_URL + '/' + 'players'; var ref = new Firebase(url); var playe

我正在尝试“安全地”将一个项目添加到我的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;
          }
        );
      }
      // ...
    }
  }
);
我的问题是:

  • 我的代码有效吗?(我没有找到任何参考资料——当然是我的错——关于捕捉angularfire错误的建议方法…)
  • 是我对
    $add(player)的第二次回调的使用。然后(
    捕获错误是有效的吗?我想不是,因为我试图在“add”之前模拟拔下网线的故障,但没有显示错误
  • 用firebase捕捉这些错误的努力真的需要吗

这种方法看起来是正确的。$add是添加项目的理想方法,您希望这些项目按时间顺序倒流并具有唯一ID。如您所发现的,应使用then()捕获错误

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

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

您可能还想签出。它并非在所有方面都完整,也没有完整的文档,但用于测试AngularFire。与其他AngularMock(如$http)一样,它通过使用flush()工作方法触发回调,允许您在事件触发时进行复杂的控制,以可控的方式模拟异步目前,添加到您需要使用的任何其他方法都需要几分钟的时间。

@Kato:谢谢您的回答!我从未深入研究过Firebase安全规则…:-(但是我无法模拟客户端$add失败,甚至设置了该规则…(我获得了常规的“成功”)在我的firebug控制台中,新数据有效地存在于firebase中……以下是我的安全规则:{“规则”:{.read::true,.write:“!newData.child('shouldFail').exists()”}我只需要一种简单的方法,在出现故障时快速测试我的逻辑,所以我最好暂时避免使用MockFirebase挖掘。。。