我已經閱讀了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