2017-03-05 41 views
1

我在我的火力地堡數據庫中的已知密鑰列表查詢通過多個鍵在火力地堡

-Ke1uhoT3gpHR_VsehIv 
-Ke8qAECkZC9ygGW3dEJ 
-Ke8qMU7OEfUnuXSlhhl 

而不是通過這些按鍵的循環,以取回其各自的對象的快照,我怎麼可以查詢每個這些密鑰在一個統一的請求中? Firebase是否提供此功能?

我已經發現了Promise.all()功能,看起來很有希望(沒有雙關語意我發誓),但我不知道如何使用獲取火力數據,像這樣

var userId = firebase.auth().currentUser.uid; 
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) { 
    var username = snapshot.val().username; 
}); 

感謝的標準的方式來實現它任何幫助!

+1

這些密鑰是否相關?他們都屬於登錄的用戶嗎? – David

+0

@大衛他們是不相關的,不屬於一個用戶。儘管 –

回答

8

正如David的評論所暗示的那樣:如果這些項目在某些方面是相關的,那麼您可以建立一個查詢來獲取它們。

否則這會做的伎倆:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
var promises = keys.map(function(key) { 
    return firebase.database().ref("/items/").child(key).once("value"); 
}); 
Promise.all(promises).then(function(snapshots) { 
    snapshots.forEach(function(snapshot) { 
    console.log(snapshot.key+": "+snapshot.val()); 
    }); 
}); 

注意,檢索每個項目有一個單獨的請求並不像你想象的那麼慢,因爲請求都發送了一個連接。有關更詳細的解釋,請參閱Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

+0

他們確實居住在同一節點下感謝弗蘭克,非常有幫助。我的一個問題是,如果我們使用兩個獨立的Firebase調用 - 一個用於地理數據,一個用於位置數據,我們將有兩個單獨的對象列表。我們是否可以輕鬆地通過匹配鍵將這兩個列表關聯起來,而無需遍歷這兩個列表並佔用更多時間? (例如,將地理數據添加到具有匹配關鍵字的節點) –

+0

在geofire節點和常規節點之間使用相應的鍵,它使用Firebase的慣用方式。 –

+0

好主意的承諾!謝謝你的提示! – Junior