簡體   English   中英

無法迭代Javascript對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM