2017-04-04 60 views
0

考虑以下(简化的)代码:(服务器端工作进程的任务,将结果写入到另一个位置的数据库,然后删除对象)什么可能会阻止发生“孩子剔除”事件?

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; 
}; 

任务对象被删除,但child-removed事件永远不会触发。

什么可能会阻止child-removed事件发生?

+0

我最初的假设是,任务执行得太快。 – Lindauson

+0

我已经将处理时间消除了一个因素:我为任务工作者处理代码添加了一个虚拟延迟,但结果相同:“on-removed”事件从不会触发。 – Lindauson

+0

此外,我已将任务添加到非根位置('.../queue/task /'),但这也未解决问题。 – Lindauson

回答

0

检查安全规则:

如果您的安全规则是在下面的默认值离开,事件查询将不工作:

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    } 
} 

另外,如果您的安全规则不允许读 - 在数据写入的位置访问(即用户具有写访问权限但不具有读访问权限)事件查询将失败。

事件查询返回已更改数据的快照(在child_removed事件中删除的数据),因此必须具有读访问权限。

相关问题