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()函数中。

09-09 20:16
查看更多