我正在使用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()'可能会或可能不会工作(主要取决于您的网络延迟) ,但它从来没有**这个问题的正确解决方案。正确的解决方案是将需要“用户”列表的代码移动到回调/然后块中。 –