Ich bin in eine seltsame Frage laufen, wo ich einmal einen Wert zu einem Objekt Firebase drücken, passieren zwei Dinge:Firebase-Werte werden ordnungsgemäß abgerufen, können aber nicht abgerufen werden?
- ich es nicht im Array zugreifen kann ich erhalten, wenn ich das Objekt von Firebase ziehen.
- Das Array, das ich erhalte, hat keine
length
Eigenschaft.
Hier ist, was meine Firebase Struktur wie folgt aussieht:
"user_solutions": {
"0":
{
"user_id": 0,
"clue_id": 0,
"hunt_id": 0,
"completed": 1
},
"1":
{
"user_id": 0,
"clue_id": 1,
"hunt_id": 0,
"completed": 0
},
"2":
{
"user_id": 0,
"clue_id": 1,
"hunt_id": 1,
"completed": 0
}
},
"-KHxBMZwVMzyiMIcbMdr":
{
clue_id: 1,
completed: 0,
hunt_id: 0,
user_id: 0
}
Hier ist die problematische Funktion ist:
userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => {
var solution = snap.val();
for (var i = 0; i < solution.length; i++) {
if (solution[i].hunt_id == 0) {
solutionsForThisHunt.push(solution[i]);
}
}
this.populateArray(solutionsForThisHunt);
});
Wenn ich den Debugger ausführen, hat solution
den Wert Object {0: Object, 1: Object, 2: Object, -KHxBMZwVMzyiMIcbMdr: Object}
, aber die length
Eigenschaft ist nicht definiert. solutionsForThisHunt
wird nie ausgefüllt. Außerdem kann ich auf die Objekte einzeln im Debugger über snap.val()[0]
/snap.val()[1]
/snap.val()[2]
zugreifen, aber aus irgendeinem Grund, wenn ich versuche, auf snap.val()[3]
zugreifen, ist es nicht definiert, obwohl es sollte ausgefüllt werden.
Liefert 'snap.val' ein reelles Array oder ein anderes iterables? Was gibt 'Array.isArray' zurück? (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) –
Sie haben Recht! Ich hatte den Eindruck, dass es ein Array zurück gab, aber es war nur ein iterables. Ihre Lösung hat funktioniert, danke. – user3802348
Firebase gibt hier kein Array zurück, da es so aussieht, als hätten Sie Ihre Schlüssel als Strings gespeichert. [Speichern sie als ganze Zahlen würde einen Unterschied machen] (https://www.firebase.com/docs/rest/guide/understanding-data.html#section-arrays-in-firebase), obwohl ich immer nicht empfehlen würde [hängt von der Array-Semantik ab, wenn es um Firebase geht] (https://www.firebase.com/docs/rest/guide/saving-data.html#section-post). –