Richtige Verwendung von hasChild () und forEach () aus einer Referenz in Firebase?

8

Aufgrund meines begrenzten Verständnisses und SQL-Hintergrunds bin ich nicht gerade mit der Verwendung von hasChild () und forEach () beschäftigt; Sie haben das Gefühl, dass sie auf die Referenz und nicht auf den Schnappschuss gehören.

(Ich verwende hasChild () für den Rest der Diskussion, aber die Konzepte sind austauschbar.)

Hier ist meine Argumentation:

  1. Ich habe einen Firebase-Pfad, der für eine users-Tabelle aufgerufen wird, sagen wir appname/users
  2. Ich möchte sehen, ob ein Benutzer (Fred) existiert
  3. Ich erhalte eine Referenz: var users = new Firebase('appname/users')

Aber ich kann nicht feststellen, ob ein Kind von hier existiert. Also hier ist was ich jetzt habe:

%Vor%

Aber das funktioniert nicht ganz. So, jetzt muss ich den Wert der Benutzer (was sich ein wenig kontraintuitiv anfühlt, da ich nicht an Benutzern interessiert bin) mit etwas wie dem folgenden erreichen:

%Vor%

Ich kann mir nicht vorstellen, dass ich einen großen Overhead erhalte, indem ich appname/users auf Basis der Docs abrufe, aber das fühlt sich an wie ein unansehnlicher Code, wenn ich nur herausfinden will, ob der Schlüssel 'Fred' existiert.

Ich möchte etwas wie:

sehen %Vor%

Gibt es einen besseren Ansatz für die Verwendung forEach / hasChild? Habe ich hier irgendwelche wichtigen logischen Überlegungen übersehen?

    
Kato 10.07.2012, 19:39
quelle

1 Antwort

12

Sie waren mit Ihrem ersten Code-Snippet tatsächlich auf dem richtigen Weg. .once () löst Ihren Callback mit einem Snapshot aus, unabhängig davon, ob Fred bereits existiert oder nicht. Sie können also einfach tun:

%Vor%

Ihr zweites Code-Snippet würde tatsächlich einen großen Aufwand verursachen, da Firebase den gesamten "Benutzer" -Standort von Firebase abruft, was ziemlich groß sein kann, wenn Sie 1000 Benutzer haben! Das erste Code-Snippet ist also definitiv der richtige Weg.

Der Grund dafür, dass hasChild und forEach in DataSnapshot statt in Firebase sind, ist, dass sie synchron sein können. In unseren frühen API-Tests hatten wir eine Mischung aus synchronen und asynchronen Methoden auf der Firebase-Referenz, aber wir stellten fest, dass dies ein bedeutender Stolperstein für Leute war (wenn Leute eine hasChild-Methode sehen, erwarten sie, dass sie einen booleschen Wert zurückgibt) sofort). Also haben wir .on () und .once () als einzige asynchrone Callback-Methode auf Firebase erstellt. Alles andere in einer Firebase-Referenz ist synchron (obwohl wir manchmal optionale asynchrone Rückrufe bereitstellen) und alles auf einer DataSnapshot ist zu 100% synchron.

Unser Ziel war es, die asynchrone Natur von Firebase für die Menschen einfacher zu verstehen und zu nutzen! Aber vielleicht haben wir es nicht 100% geschafft. :-) Wir berücksichtigen Ihr Feedback bei der Planung zukünftiger API-Optimierungen. Danke!

    
Michael Lehenbauer 10.07.2012, 21:15
quelle

Tags und Links