[英]Detect if data is retrieved from Firebase in Javascript
我正在開發Web應用程序,並通過以下方式維護Firebase中的數據。
在“用戶”節點下可以有多個節點,在每個節點中,我正在存儲用戶信息,例如姓名,性別等。
現在,我正在嘗試使用以下Javascript函數檢索所有用戶的名稱。
function getList(){
var nameList = new Array();
var uidList = new Array();
var query = firebase.database().ref('Users');
query.once("value").then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var name = childSnapshot.val().Name;
var uid = childSnapshot.key;
alert(name); //first alert
nameList.push(name);
uidList.push(uid);
});
});
var len = nameList.length;
alert(len); //second alert
}
當我在瀏覽器上運行它時,首先顯示數組的長度為0(在第二個警報中),然后顯示從數據庫中檢索到的名稱(在第一個警報中)。
為什么第二個警報在第一個警報之前執行? 從Firebase檢索數據的合適方法是什么,以便我可以檢測到已檢索到數據,然后執行進一步的代碼以獲取namelist
數組的長度?
我嘗試過使用while循環,而“ name”和“ uid”為null,但這沒有用。
嘗試這個:
function getList() {
var query = firebase.database().ref('Users');
query.once("value").then(snapshots => snapshots.map(snapshot => ({
name: snapshot.val().Name,
uid: snapshot.key
}))).then(result => {
console.log(result);
});
}
查詢的數組將重新映射為{ name: "name", uid: "key" }
對象的數組。
承諾是處理此類情況的方法。 將數據推送到Firebase的函數完成后,請使用諾言異步調用來處理結果的執行,這樣警報將顯示namelist
的長度。
function getList(){
var nameList = new Array();
var uidList = new Array();
var query = firebase.database().ref('Users');
let getData = new Promise((resolve, reject) => {
query.once("value").then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var name = childSnapshot.val().Name;
var uid = childSnapshot.key;
alert(name); //first alert
nameList.push(name);
uidList.push(uid);
});
resolve(nameList)
})
});
getData.then((nameList) => {
alert(nameList.length)
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.