2017-03-05 2 views
1

Ich habe eine Liste der bekannten Schlüssel in meiner Firebase DatenbankAbfragen durch mehrere Schlüssel in Firebase

-Ke1uhoT3gpHR_VsehIv 
-Ke8qAECkZC9ygGW3dEJ 
-Ke8qMU7OEfUnuXSlhhl 

Anstatt durch jede dieser Tasten Looping eine Momentaufnahme ihrer jeweiligen Objekt zu holen, wie kann ich für jede Abfrage dieser Schlüssel in einer einzigen, einheitlichen Anfrage? Bietet Firebase das?

ich die Promise.all() Funktion entdeckt haben, die vielversprechend aussieht (kein Wortspiel beabsichtigt ich schwöre), aber ich bin mir nicht sicher, wie es zu implementieren, um die Standardmethode unter Verwendung von Feuerbasis Daten des Abrufens wie so

var userId = firebase.auth().currentUser.uid; 
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) { 
    var username = snapshot.val().username; 
}); 

Vielen Dank für irgendeine Hilfe!

+1

Sind diese Schlüssel überhaupt verwandt? Gehören alle zum angemeldeten Benutzer? – David

+0

@David sie sind nicht verwandt und gehören nicht zu einem Benutzer. Sie befinden sich unter dem gleichen Knoten obwohl –

Antwort

8

Wie Davids Kommentar vorgeschlagen: Wenn die Elemente in irgendeiner Weise verwandt sind, können Sie möglicherweise eine Abfrage erstellen, um sie alle zu erhalten.

Andernfalls würde dies den Trick:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
var promises = keys.map(function(key) { 
    return firebase.database().ref("/items/").child(key).once("value"); 
}); 
Promise.all(promises).then(function(snapshots) { 
    snapshots.forEach(function(snapshot) { 
    console.log(snapshot.key+": "+snapshot.val()); 
    }); 
}); 

Beachten Sie, dass mit einem separaten Antrag jedes Elements Abrufen nicht so langsam ist wie Sie vielleicht denken, da die Anfragen alle über eine einzige Verbindung gesendet werden. Für eine längere Erklärung siehe Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly.

+0

Danke Frank, sehr hilfreich. Eine Frage, die ich habe, ist, wenn wir zwei separate Aufrufe an Firebase verwenden - eine für Geodaten, eine für Standortdaten, wir haben zwei separate Listen von Objekten. Können wir die beiden Listen einfach über die passenden Tasten verknüpfen, ohne beide Listen durchlaufen zu müssen und mehr Zeit in Anspruch nehmen zu müssen? (z. B. Hinzufügen von Geodaten zu einem Knoten mit einem übereinstimmenden Schlüssel) –

+0

Mit entsprechenden Schlüsseln zwischen den Geofire-Knoten und Ihren regulären Knoten ist es die idiomatische Methode, Firebase zu verwenden. –

+0

Gute Idee zu den Versprechungen! Danke für den Tipp! – Junior