Hallo,
zunächst erstmal bin ich noch ziemlich neu in der JavaScript Welt unterwegs.
Ich möchte über Javascript Daten aus Firebase laden.
Hierfür wird über eine Funktion eine weitere Funktion aufgerufen, die die Daten zurückgeben soll. Nur das funktioniert leider nicht so wirklich.
So sieht das Konstrukt aus:
function init() {
var alleDaten = readData();
// Weiterer Code der erst nach kompletten Durchlauf von readData() ausgeführt werden soll
function readData(){
firebase.database().ref().once('value').then(function(snapshot) {
snapshot.forEach((child) => {
uid = child.key;
child.forEach((snap) =>{
var id = snap.key;
var wert = snap.val();
firebase.database().ref(uid+'/'+id).once('value').then( (snapchild) => {
snapchild.forEach((snapshotchild) =>{
console.log(snapshotchild.val());
listKunde.push(snapshotchild.val());
alert(listKunde.length); // KEINE leere Liste
//if (letzter Eintrag aus Datenbank geladen)
// Dann return Liste
// return listKunde;
});
alert(listKunde.length); // leere Liste
});
});
});
alert("Kunde; " + listKunde.length);
});
return listKunde; //Leere Liste
}
Alles anzeigen
Ich sehe hier zwei Probleme:
Zum einen weiß ich nicht genau, wie ich die Liste am besten zurückgeben kann. Am Ende der Funktion wird eine leere Liste zurückgeliefert. Wenn ich die Liste in der zweiten forEach-Schleife zurückgebe, dann wird die Liste ja bereits nach dem Laden eines Objekts zurückgegeben (ich möchte aber alle Objekte auf einmal zurückgeben (gemäß Pseudocode innerhalb der zweiten forEach-Schleife).
Desweiteren erfolgt das Laden der Objekte zeitversetzt. Das soll heißen, dass der Code nach dem Funktionsaufruf noch vor dem Laden der Objekte stattfindet. Ich möchte aber, dass der Code erst weiter fortgesetzt werden soll, wenn alle Objekte geladen wurden. Ich habe es mit asynch function readData(){ ... versucht, aber das hat nicht geholfen. Wie stelle ich das am besten an bzw. wo müsste ich an meinem Code anpassungen vornehmen.
Ich bedanke mich. =)
Liebe Grüße