2016-04-06 21 views
0

在下面的代碼中,在處理快照中返回的數據之後,我正在試圖刪除有問題的記錄。當我使用通過子方法附加的記錄的關鍵字對我的引用調用remove時,所有父節點都將被移除到FB應用程序的根目錄。我懷疑這是我的代碼中的錯誤。希望能提供任何幫助。Firebase調用.remove()在裁決中刪除所有父母

var Firebase = require('firebase'); 
var config = require('./config.json'); 
var fbRef = new Firebase(config.firebaseEndpoint + "/messages"); 
var messenger = require('./messenger.js'); 

fbRef.on('value', function (snap) { 

//If Data is returned convert payload to array. 
//pass each mesaage into messenger and upon completion delete the 
// firebase record 
if (snap.exists()) { 

    var payload = snap.val(); 
    var keys = Object.keys(payload); 

    keys.forEach(function (key) { 

     var msg = payload[key]; 

     messenger(msg, function (msgErr, msgData) { 
      if (!msgErr) { 

       fbRef.child(key).remove(); 
      } 
      else { 
       console.log(msgErr); 
      } 
     }); 
    }); 
    } 
}); 

回答

1

很難肯定沒有看到您的JSON結構(提示:把它添加到文本你的問題),但我想你可能會誤以爲火力地堡如何操作。

Firebase存儲由路徑標識的位置的值。當您在某個位置存儲值時,路徑會自動創建。當您從位置刪除最後一個值時,路徑會自動刪除。

除此之外,該代碼是較爲地道:

fbRef.on('value', function (snap) { 
    if (snap.exists()) { 
    snap.forEach(function(msgSnap) {   
     var msg = msgSnap.val(); 
     messenger(msg, function (msgErr, msgData) { 
     if (!msgErr) { 
      msgSnap.ref().remove(); 
     } 
     else { 
      console.log(msgErr); 
     } 
     }); 
    }); 
    } 
}); 
+0

弗蘭克感謝。你知道我的知識缺口,因爲我沒有意識到這條路與最後一個孩子一起被移除。另外,感謝您指出forEach。我錯過了API,它會爲我節省一些時間。 –