我已经阅读了How do I return the response from an asynchronous call?这个问题的答案但是我不确定我是否理解,我认为我的问题有点不同。我改变我的服务是这样的:如何在angularjs服务中返回异步调用的响应?
.service('CommonService',['$firebase', function($firebase){
var username;
function onComplete(result){
username = result;
};
var getData = function(){
var ref = new Firebase("https://instafame.firebaseio.com");
ref.onAuth(function(authData){
var userid = authData.uid;
console.log(userid);
var newref = new Firebase("https://instafame.firebaseio.com/users/" + userid)
newref.once("value", function(snapshot) {
var data = snapshot.val()
newUsername = data.username;
callback(newUsername);
})
});
};
return{
getUsername: function(){
getData(onComplete);
return username;}
};
}])
在我的控制器I存储变量user
内CommonService
的回报:
var user = CommonService.getUsername();
console.log(user);
的问题是,控制台仍返回“未定义” 。我试图根据这些建议更改代码,但它没有运行。我该怎么办?
在此先感谢
你有所有这些回调,试图完成不可能的事情。 –
使'getData'和'getUsername'返回一个承诺,而不是回调。 – Bergi
@Bergi我很无知,你可以在代码中更明确吗? – Radames