2017-04-04 67 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事件中刪除的數據),因此必須具有讀訪問權限。

相關問題