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
});
}
为什么在promise.then尚未完成时执行console.log(“ yeah”)?
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);
});
});
}
控制台的输出应为
keys retrieved: ,
(firstname and lastname retrieved),
yeah
而是给
keys retrieved ,
yeah,
(firstname and lastname retrieved)
最佳答案
这就是异步的意思。
尽管获取了您的数据,但javascript继续执行脚本的其余部分。并且由于您的console.log("yeah")
并非您的承诺的一部分,因此将在获取数据之前执行它。
您要么必须使其同步(如果尝试获取数据就不好了),要么可以将console.log()
移到promise.then()
函数中。