我正试图安全地#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 ... 答案 0 :(得分:1)
这种方法看起来是正确的。 $ add是添加项目的理想方式,您希望它们按时间顺序反刍,并具有独特的ID。正如您所发现的那样,应使用then()来捕获错误。
请注意,您只是因为拔下网线而未能生成错误。 Firebase具有容错功能,可以在本地应用更改,等待连接恢复,然后再发送到服务器。通过设置防止写入相关路径的安全规则,最好创建错误条件。
".write": "!newData.child('shouldFail').exists()" // for example
您可能还想查看MockFirebase。它并未在各方面都完整,也没有完整记录,但用于测试AngularFire。与其他Angular模拟(例如$ http)一样,它通过使用flush()方法自行决定触发回调,允许您在事件触发时进行复杂控制,以可控方式模拟异步。还有一个failNext方法,它目前仅适用于set(),但是需要几分钟才能添加到您需要使用的任何其他方法。