function loadTables() {
refReview.on("value", function(snap) {
var data = snap.val();
var file11 = "";
for (var key in data) {
console.log("keys retrieved", data[key].revieweeID);
var idOfReviewee = data[key].revieweeID;
var promise = getData(idOfReviewee);
promise.then(function(returnedFnLn) {
console.log(returnedFnLn);
});
console.log("yeah");
} //end of for loop
});
}
why does it executes the console.log("yeah") when promise.then is not yet done?
function getData(idRev) {
return new Promise(function(resolve, reject) {
getDataToUsers = firebase.database().ref("users").child(idRev);
getDataToUsers.once("value", function(snap) {
var fnLn = snap.val();
var first = fnLn.firstname;
var second = fnLn.lastname;
forPromiseFnLn = first.concat(second);
resolve(forPromiseFnLn);
});
});
}
Output of console should be
keys retrieved: ,
(firstname and lastname retrieved),
yeah
But instead gives
keys retrieved ,
yeah,
(firstname and lastname retrieved)
That's what async stands for.
Whyle your data get's fetched, javascript continues to execute the rest of your script. And since your console.log("yeah")
ist not part of your promise, it's being executed before the data has been fetched.
Either you have to do it sync (what's not good if you try to fetch data) or you can move your console.log()
inside your promise.then()
function.