javascript - 在运行时在javascript中从firebase实时数据库动态获取数据
问题描述
我有以下问题:我想在运行时从 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
函数selectedPlayerScores
在方法返回的 promiseonce()
解析之前返回。
您应该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;
});
}
这意味着您必须按如下方式调用您的函数,因为它将是异步的并返回一个承诺:
getScoresOfPlayer('xyz')
.then(function(selectedPlayerScores) {
....
})
推荐阅读
- python - 为存储在对象列中的日期时间选择 DataFrame 行
- c# - .net core 2.1 ocelot 网关返回 404
- c# - 使用 Array.BinarySearch 在文本框上返回字符串
- java - 为什么即使附加了这么多条件,它也会打印“NO”?
- reactjs - 如何在反应虚拟化网格中选择一行?
- python - 我在使用 Plotly Scatter 时遇到问题
- javascript - Sequelize - 与子选择连接(1:n - 从第二个表中选择最后一行)
- typeorm - 如果存在则更新实体,如果不存在则创建实体
- android - 如何将字符串数据从活动发送到片段
- java - Spring Data Jpa 并发用户请求性能命中