我正在使用Firebase以及angularJS來獲取用戶列表。我可以從我與once()
函數讀取數據庫的所有用戶,但我想不出爲什麼userList
返回undefined下面爲什麼Firebase在once()函數之外失去引用?
.service('userService', [function() {
this.getUsers = function() {
var users;
var userList;
var ref = firebase.database().ref('/users/');
ref.once('value').then(function(snapshot) {
users = snapshot.val();
for(var key in users) {
users[key].id = key;
// do some other stuff
}
console.log(users); // outputs all users
}).then(function(){
userList = users;
console.log(userList); // outputs all users
},(function(error){
alert('error: ' + error);
});
console.log(userList); // outputs 'undefined'
}
}]);
我迫不及待地分配我userList
變量,直到我做處理users
,但沒有運氣。
這裏有一些重要的信息,我錯過了承諾/回調的位置,我在文檔中找不到它;有人能幫我理解我的問題嗎?
謝謝@imjared,我包含一些額外的邏輯,以確保我的異步函數在我的代碼中成功完成後填充'userList' –
'setTimeout()'可能會或可能不會工作(主要取決於您的網絡延遲) ,但它從來沒有**這個問題的正確解決方案。正確的解決方案是將需要「用戶」列表的代碼移動到回調/然後塊中。 –