Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中运行时从firebase实时数据库动态获取数据_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

在javascript中运行时从firebase实时数据库动态获取数据

在javascript中运行时从firebase实时数据库动态获取数据,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我有以下问题:我想在运行时从firebase的特定节点获取数据。它应该显示以前选中的玩家的状态。现在,我可以在开始时使用on获取所有数据,但我只想在需要时通过下载on player的数据来保存数据传输,因此我尝试过这样使用一次: var firebaseRef = firebase.database().ref(); function getScoresOfPlayer(player) { console.log(player); var selecte

我有以下问题:我想在运行时从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;
    }

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

提前谢谢

这是因为getScoresOfPlayer函数在方法返回的承诺解析之前返回SelectedPlayerCores

您应将报税表包括在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;
  });

}
这意味着您必须按如下方式调用函数,因为它将是异步的,并且要返回一个承诺:

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