![](/img/trans.png)
[英]Functional Javascript: Having trouble iterating through an object that has nested objects and arrays
[英]Having trouble iterating through Javascript objects
我一直遇到訪問JS對象中的數據的問題。 收集數據的代碼(來自Firebase數據庫)如下:
var get_user_data = function() {
...
snapshot.forEach(function(child){
var key = child.key;
var value = child.val();
user_char[key] = value;
console.log(key, value);
});
store_user_char(user_char);
}
var store_user_char = function(user_char) {
char_obj = user_char;
console.log(char_obj);
for(var key in char_obj){
if(char_obj.hasOwnProperty(key)){
console.log(key);
}
}
哪個(理論上)應該從Firebase數據庫創建JS對象,當它將數據寫入user_char時,它會將每個鍵:對象對打印到控制台中。 之后,當store_user_char()執行時,它還應打印出之前的每個鍵。
第一個console.log()在寫入user_char時成功輸出每個鍵:對象對。 第二個console.log()成功輸出對象,我甚至可以單擊並編輯其中的所有元素,在Firefox控制台中如下所示:
但是第三個console.log()永遠不會執行,並試圖通過訪問如下所示的鍵從char_obj獲取任何數據:
char_obj['KSxpjEvkCOL6ugGkxqn']
什么都不做,返回undefined 。 奇怪的是,在Firefox中手動單擊對象允許我解析每個子元素,因此我知道數據存儲在某處。
我唯一能想到的是來自數據庫的請求可能需要很長時間來返回數據,但即使這樣,store_user_char()函數也應該在數據存儲到user_char之后執行,所以我非常困惑為什么我的代碼似乎無法遍歷對象。
我覺得好像我遺漏了一些關於JS對象的東西,這就是為什么我的代碼無法找到數據的原因,但是我一直在試圖找出最新情況,以及如何訪問數據。
任何有關此事的幫助將不勝感激!
編輯:get_user_data的完全def如下:
// Global variables
var user_email;
var user_char = {};
var uid;
var get_user_data = function() {
// Authenticate current user
var user = firebase.auth().currentUser;
// Get User Email and char list
if (user != null) {
user_email = user.email;
uid = firebase.auth().currentUser.uid;
var getChar = firebase.database().ref('/users/' + uid + '/chars/').orderByKey();
getChar.on('value', function(snapshot){
snapshot.forEach(function(child){
var key = child.key;
var value = child.val();
user_char[key] = value;
});
});
store_user_char(user_char);
}
}
getChar.on('value', function(snapshot){
snapshot.forEach(function(child){
var key = child.key;
var value = child.val();
user_char[key] = value;
});
});
將異步調用,put函數調用store_user_char(user_char); 在getChar內部回調,你的問題將得到解決。 喜歡:
getChar.on('value', function(snapshot){
snapshot.forEach(function(child){
var key = child.key;
var value = child.val();
user_char[key] = value;
});
store_user_char(user_char);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.