AngularJS - получение асинхронных данных с фабрики для использования в контроллере
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь своевременно передать данные с фабрики на контроллер, чтобы контроллер получил доступ к этим данным. В настоящее время, когда консоль выходит из системы данных, я получаю пустой объект, но если я проверяю данные дальше, я получаю целое "значение было снято моментально, но здесь оно живое" в Chrome.
Вот моя фабрика под названием 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
бы справиться с моей проблемой, но это явно не так. Что я делаю неправильно?
1 ответ
Оказывается, добавление второго обещания /.hen на стороне контроллера позаботилось о моих проблемах. Но спасибо @JB-Nizet и @Ladmerc за помощь!