2016-06-09 154 views
0

我是Firebase的新手,我試圖弄清楚如何從我的Firebase數據庫檢索數據。基於用戶的唯一ID(uid),我可以成功添加到它,但現在從中獲取數據似乎非常困難。我想抓住當前用戶(在下面的代碼「用戶」)的第一個名字,但這個JavaScript似乎並不奏效:一旦從JavaScript中檢索Firebase數據庫中的數據

var uid = user.uid 
firebase.database().ref('users/' + uid).on('value', function(snapshot) { 
    this.first_name = snapshot.val().first_name; 
}); 

,因爲我打這個電話給this.first_name,它給我下面的錯誤:

FIREBASE WARNING: Exception was thrown by user callback. TypeError: Cannot set property 'first_name' of null.

萬一有幫助,我的數據庫的結構是這樣的:

{ 
    users: { 
    "uid1": { 
     first_name: "John" 
    }, 
    "uid2": { 
     first_name: "Sue" 
    } 
    } 
} 
+0

您爲'this.first_name'分配一個值。你期待什麼'這個'是?由於您處於回調鏈的中間,所以'this'上下文可能是各種各樣的(包括'null')。 –

回答

1

使用var first_name代替this.first_name。它應該工作。

var uid = user.uid 
firebase.database().ref('users/' + uid).on('value', function(snapshot) { 
    var first_name = snapshot.val().first_name; 
}); 
+0

非常感謝你的工作!但是,之前我使用過'this.first_name',因爲我想在HTML中顯示這些信息。有沒有辦法可以做到這一點? – Anderillo

+0

好的,我明白了。我只是將innerHTML設置爲'first_name'。 – Anderillo

1

上面的答案是正確的。但是,如果在查詢中使用child,我想它更具可讀性。兩者都應該工作。

firebase.database().ref('users').child(uid).on('value', function(snapshot) { 
    var first_name = snapshot.val().first_name; 
});