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

标签 javascript firebase firebase-realtime-database

我遇到以下问题:我想在运行时从 Firebase 的特定节点获取数据。它应该显示之前选择的玩家的“统计数据”。现在我可以在开始时使用 on() 来获取所有数据,但我想通过仅在需要时下载播放器上的数据来保存数据传输,所以我尝试像这样使用一次:

    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 函数在 once() 返回的 Promise 之前返回 selectedPlayerScores方法解决。

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

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) {
   ....
})

关于javascript - 在javascript中运行时动态从firebase实时数据库获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55726202/

相关文章:

java - 更改 firebase 同级值

JavaScript 位置重定向导致 Chrome 上的 AJAX 调用停止

firebase - 使用 gcloud 服务帐户登录 Firebase

java - 当我添加监听器时,ChildEventListener 的 onAddChild 会为所有现有节点触发

android - 作为缓存的 Firebase 离线功能

ios - 数据未显示在 firebase 数据库中

java - 如何在 Firebase 实时数据库中获取 child 姓名

javascript - 数组 is.Array if 和 else 语句

javascript - 是否可以使用 jQuery 根据背景 slider 图像名称更改字体颜色?

javascript - 在 javascript 中将坐标存储为 2D 矢量类