考虑以下(简化)代码:
var queueTask = function (taskObject) {
var deferred = $q.defer();
// Create new task reference & push new Task object to reference location
var newTaskRef = firebase.database().ref("task").push(taskObject);
newTaskRef.once('child_removed', function (snapshot) {
// SUCCESS
console.log("@DEBUG - TASK COMPLETE/CHILD REMOVED");
deferred.resolve(snapshot);
});
return deferred.promise;
};
(服务器端工作程序处理任务,将结果写入数据库上的另一个位置,然后删除该对象。)
删除了Task对象,但child-removed
事件永远不会触发。
什么可能阻止child-removed
事件被解雇?
答案 0 :(得分:0)
检查安全规则:
如果您的安全规则保留以下默认值,则事件查询将不起作用:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
}
}
此外,如果您的安全规则不允许对写入数据的位置进行读访问(即用户具有写访问权限但不具有读访问权限)事件查询将失败。
事件查询返回已更改数据的快照(在child_removed
事件的情况下删除数据),因此需要具有读访问权。