2016-11-05 2 views
2

Ich sehe einen kleinen Unterschied zwischen child_added und value bei der Rückgabe von Daten in Firebase. Mit value ich testen, um zu sehen, ob snapshot.val() etwas oder nicht verwenden es wie folgt zurückgegeben hat:Unterschiede zwischen "child_added" und "value" firebase?

Daten holen:

ref.orderByChild('appUserName') 
    .equalTo(issuer) 
    .once('value') 
    .then(function (snapshot) { 
     var value = snapshot.val(); 
     if (value) { 
      // Has Value... 
     }else{ 
      //Has No Value... 
     } 

Datenstruktur:

AppUsers -- 
    234jl23jl4kj23 -- 
     data -- 
      //.. data 
     userName : "testUser1", 
     userPass: "password123" 
    9873h23foiu34u 
     //same structure 
    o8987s52df134o 
     //same structure 

Wenn ich console.log, wie der Wert hat returned snapshot.val() es gibt die Daten auf der Ebene des generierten Schlüssels zurück:

{234jl23jl4kj23 -- 
    {data -- 
     //.. data 
    userName : "testUser1", 
    userPass: "password123"}} 

Wenn ich die Daten child_added mit:

ref.orderByChild('appUserName') 
    .equalTo(issuer) 
    .once('child_added') 
    .then(function (snapshot) { 
     var value = snapshot.val(); 
     if (value) { 
      // Has Value... 
     }else{ 
      //Has No Value... 
     } 

Es wird nicht einmal die .then Funktion geht in, wenn issuer nicht als Wert appUserName gefunden wird, so kann ich nicht in der Feuerbasis Funktion sehen, ob es einen Wert bekam oder nicht. Auch der Weg child_added bekommt Daten ist eine Ebene tiefer. Statt an den generierten Schlüsseln zurückkehr es gibt die Werte in diesem Schlüssel:

{data -- 
    //.. data 
userName : "testUser1", 
userPass: "password123"} 

Ich würde es vorziehen, es auf diese Weise zu verwenden, da es eine weniger Schleife wäre würde ich zunächst prüfen muß, um die Daten innerhalb der bekommen Schlüssel, dann durchlaufen Sie die Objekte im Datenpunkt. Allerdings, wenn issuer nicht in appUserName pflegt es in die Funktion geht für mich selbst ein ifelse

Gibt es eine Möglichkeit zu tun, so tief wie child_added ohne Looping zu bohren, in aber noch in der Lage sein, ein if else zu tun, um zu überprüfen, ob die snapshot.val() hat irgendwas?

Antwort

4

Das Ereignis child_added wird für jedes übereinstimmende untergeordnete Element unter dem abgefragten Knoten ausgelöst. Wenn es keine passenden Kinder gibt, wird es nicht ausgelöst.

Um zu testen, ob ein Knoten vorhanden ist, müssen Sie einen value-Handler verwenden. Und da eine Abfrage mehrere Ergebnisse haben kann, müssen Sie die untergeordneten Elemente durchlaufen.

+0

Ah, das macht dann Sinn. Vielen Dank. – Chipe

Verwandte Themen