[英]Returning a single child's value on Firebase query using orderByChild and equalTo
我正在嘗試為Firebase實時數據庫中當前記錄的存儲中的圖像提取URL。
這是用於捕捉游戲的-屏幕上將有兩張卡片(左圖和右圖),當兩張牌匹配時,用戶將單擊捕捉。
我所有的圖像網址都以以下方式存儲:
每個人都有一個唯一的稱為“索引”的孩子-我還有另一棵樹,它只是每個圖像記錄的運行計數。 因此,當前我正在運行一個函數,該函數檢查當前計數的總數,然后執行隨機函數以生成隨機數,然后使用orderByChild和包含隨機索引號的equalTo對圖像樹執行數據庫查詢。
如果我記錄它的數據快照,那么我可以看到一條記錄的完整節點(因此,索引,分數,URL,用戶及其值),但是如果我嘗試僅提取URL,則會返回Null值。 看起來很煩,我可以很隨意地返回“ URL”一詞,但我無法獲得潛在的價值。 我想知道這是否是因為它是一個字符串而不是一個數字,但是我找不到任何暗示這一問題的信息。
請記住,我最多只學習Java語言大約一個星期,因此,如果我犯了明顯的菜鳥錯誤,這可能就是原因!
下面是一個代碼片段,向您展示我的意思:
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;
})
})
})
當您對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;
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.