2016-04-06 4 views
0

Im folgenden Code, nach der Verarbeitung der Daten im Snapshot zurückgegeben, ich suche den betreffenden Datensatz zu entfernen. Wenn ich remove auf meine Referenz mit dem Schlüssel des über die Child-Methode angehängten Datensatzes rufe, werden alle Elternknoten bis zum Stamm der FB-App entfernt. Ich vermute, dass es sich um einen Fehler in meinem Code handelt. Würde jede mögliche Unterstützung schätzen, die zur Verfügung gestellt werden kann.Firebase Aufruf .remove() auf Ref entfernt alle Eltern

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

Antwort

1

Es ist schwer, sicher zu sein, ohne Ihre JSON-Struktur zu sehen (Hinweis: fügen Sie es als Text zu Ihrer Frage), aber ich denke, Sie verkennen kann, wie Firebase arbeitet.

Firebase speichert Werte an Orten, die durch Pfade identifiziert werden. Wenn Sie einen Wert an einem Speicherort speichern, wird der Pfad automatisch erstellt. Wenn Sie den letzten Wert von einem Speicherort entfernen, wird der Pfad automatisch entfernt.

von Abgesehen davon, ist dieser Code etwas mehr idiomatische:

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

Frank Dank. Sie haben die Lücke in meinem Wissen entdeckt, weil ich nicht bemerkt habe, dass der Pfad zusammen mit dem letzten Kind entfernt wird. Danke auch für das forEach auf dem Snap. Ich habe das in der API verpasst und es wird mir einige Zeit ersparen. –