0
我遇到的問題是,我試圖從控制器訪問該數據的工廠獲取數據到我的控制器。目前,當我登出數據時,我得到一個空的對象,但是如果我進一步檢查數據,我會在Chrome中看到整個「價值被快照,但在這裏是實時的」。AngularJS - 從工廠獲取異步數據以在控制器中使用
這裏是我的工廠,所謂的DataService:
var data = {};
var firstPillarData = {};
var secondPillarData = {};
var thirdPillarData = {};
firstPillarData.ourArray = [];
secondPillarData.ourArray = [];
thirdPillarData.ourArray = [];
function userRetrievalSuccess(response){
console.log('userRetrievalSuccess', response.data);
data.users = response.data;
console.log('data.users is', data.users);
console.log('and the data object is', data);
for(var i = 0; i < data.users.length; i++){
if(data.users[i].initiatives != null){
console.log("we have initiatives for this user", data.users[i]);
for(var j = 0; j < data.users[i].initiatives.length; j++){
switch(data.users[i].initiatives[j].pillar){
case 1:
firstPillarData.ourArray.push(data.users[i].initiatives[j]);
break;
case 2:
secondPillarData.ourArray.push(data.users[i].initiatives[j]);
break;
case 3:
thirdPillarData.ourArray.push(data.users[i].initiatives[j]);
break;
default:
break;
}
}
}
}
data.firstPillarData = firstPillarData;
data.secondPillarData = secondPillarData;
data.thirdPillarData = thirdPillarData;
console.log("our data.firstPillarData is", data.firstPillarData);
console.log("our data.secondPillarData is", data.secondPillarData);
console.log("our data.thirdPillarData is", data.thirdPillarData);
return data;
}
function userRetrievalFail(){
console.log('error retrieving users');
}
function getAllUserData(){
$http.get('/kpi/allUsers/').then(userRetrievalSuccess, userRetrievalFail)
}
這裏的地方它被稱爲在我的控制器:
DataService.getAllUserData();
var data = DataService.data;
我認爲使用.then
方法上$http.get
會處理我的問題,但它顯然不是。我究竟做錯了什麼?
您的數據檢索應該在'.then'的userRetrievalSuccess中。 現在你只是希望在調用userRetrievalSuccess之後調用console.log – Ladmerc
@Ladmerc我不完全理解你在說什麼。當我說'data.users = response.data'時,數據在userRetrievalSuccess中被檢索到,並且當我設置'data.XPillar = xPillarData'時又是這樣的...不是嗎? – DonnyBrook
你錯過了它的異步事實。這意味着在t0時刻,你在t0 +幾納秒的時間內調用服務,打印數據,然後在稍後的T0 +半秒內,當http響應返回時,執行userRetrievalSuccess函數並填充數據。該服務應該返回一個承諾。閱讀http://blog.ninja-squad.com/2015/05/28/angularjs-promises/ –