使用JavaScript在运行时从Firebase实时数据库动态获取数据

时间:2019-04-17 11:10:36

标签: javascript firebase firebase-realtime-database

我遇到以下问题:我想在运行时从Firebase的特定节点获取数据。它应该显示之前选择的球员的“状态”。现在我可以使用on()来开始获取所有数据,但是我想通过仅在需要时下载on player上的数据来保存数据传输,因此我尝试使用如下方式:

    var firebaseRef = firebase.database().ref();

    function getScoresOfPlayer(player) {
      console.log(player);
      var selectedPlayerScores = [];

      firebaseRef.once('value').then(function(snap) {
        snap.child('scores').child('thierschi').forEach(function(child) {
          selectedPlayerScores.push([child.key, child.val()]);
        });
      });

      return selectedPlayerScores;
    }

问题在于它会在将数据加载到数组之前重新运行该数组。另外,我检查了文档,但没有找到更好的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为getScoresOfPlayer函数在once()方法返回的承诺解析之前返回了selectedPlayerScores

您应将return包含在then()中,如下所示:

var firebaseRef = firebase.database().ref();

function getScoresOfPlayer(player) {
  console.log(player);
  var selectedPlayerScores = [];

  return firebaseRef.once('value')  //return here as well
  .then(function(snap) {
    snap.child('scores').child(player).forEach(function(child) {  //I guess it should be child(player) and not child('thierschi') here
      selectedPlayerScores.push([child.key, child.val()]);
    });

    return selectedPlayerScores;
  });

}

这意味着您必须按以下方式调用函数,因为它将是异步的并返回promise:

getScoresOfPlayer('xyz')
.then(function(selectedPlayerScores) {
   ....
})