我正在尝试为当前登录firebase实时数据库的存储中的图像提取URL。
这是一个快照游戏 - 屏幕上会有两张牌(左图和右图),当两个匹配时,用户将点击快照。
我的所有图片网址都按以下方式存储:
每个人都有一个名为“索引”的独特孩子 - 我还有另一棵树,它只是每张图像记录的运行计数。所以目前我运行的函数检查当前计数的总和,然后执行随机函数生成随机数,然后使用orderByChild和包含随机索引号的equalTo在图像树上执行数据库查询。 p>
如果我记录了这个数据句,我可以看到一个记录的完整节点(索引,得分,网址,用户及其值),但是如果我尝试拉取URL,则返回值为Null。我可以,而不是恼人地,返回“URL”一词似乎在我的闲暇,但我无法得到潜在的价值。我想知道这是不是因为它是一个字符串而不是数字,但我找不到任何暗示这是一个问题。
请记住,我最多只学习Javascript大约一周,所以如果我犯了明显的菜鸟错误,那可能就是原因!
下面是一段代码片段,向您展示我的意思:
var indRef = firebase.database().ref('index')
var imgRef = firebase.database().ref('images')
var leftImg = document.getElementById('leftImg')
var rightImg = document.getElementById('rightImg')
document.addEventListener('DOMContentLoaded', function(){
indRef.once('value')
.then(function(snapShot){
var indMax = snapShot.val()
return indMax;
})
.then(function(indMax){
var leftInd = Math.floor(Math.random()* indMax + 1)
imgRef.orderByChild('index').equalTo(leftInd).once('value', function(imageSnap){
var image = imageSnap.child('url').val();
leftImg.src=image;
})
})
})
答案 0 :(得分:2)
对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
您的代码需要通过循环Snapshot.forEach()
:
imgRef.orderByChild('index').equalTo(leftInd).once('value', function(imageSnap){
imageSnap.forEach(function(child) {
var image = child.child('url').val();
leftImg.src=image;
})
})