2016-10-30 2 views
0

Hier ist ein Bild von meiner Datenbank image of my database.Knoten basierend auf dem Wert eines anderen Knotens abrufen (Firebase)?

Mit nur ein Anruf, möchte ich einen Benutzer (seine UID-Ordner) basierend auf dem, was in featuredUser> uid gespeichert ist abrufen. Ich weiß, dass ich es mit zwei Anrufen tun kann (siehe unten), aber ich würde wirklich eine 1-Anruf-Lösung mögen. Hilfe!

var uid; 
database.ref('meta/featuredUser').on('value', function(snap) { uid = snap.val().uid; }; 
database.ref('users/'+uid).on('value', function(snap) { desiredResult = snap.val(); }; 

Antwort

1

Es ist nicht möglich, Daten von zwei solchen unterschiedlichen Knoten mit einem Aufruf zu laden. Der einzige Weg wäre, die niedrigste Ebene zu laden, die sie teilen, was in diesem Fall bedeutet, dass Sie die gesamte Datenbank laden.

Viele Entwickler sind übermäßig pessimistisch darüber, wie lange es dauert, Daten mit mehreren API-Aufrufen zu laden. Da Firebase die Anforderungen über eine einzelne Verbindung weiterleitet, ist das Laden von Elementen mit mehreren Aufrufen sehr effizient. Siehe meine Antwort hier für eine längere Erklärung: Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

+1

Sie können nicht zwei Anfragen in die Pipeline leiten, wenn die zweite Anfrage vom Ergebnis der ersten abhängig ist. Die Situation des OP ist also zu 100% seriell. Aufgrund der gemeinsamen Nutzung von Verbindungen kann dieselbe Verbindung verwendet werden, aber dies wird technisch nicht pipelined, wenn die beiden Anforderungen nicht zur gleichen Zeit in Betrieb sein können. – jfriend00

+0

Mit meiner verschachtelten Abfrage dauert es 0,5 Sekunden von Anfang bis Ende. Würde das für einen solchen Anruf als langsam angesehen werden? Btw dankt jfriend für diesen Kommentar –

+0

Auf eine andere Anmerkung wäre dies eine gute Feature-Anfrage? –

Verwandte Themen