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 за помощь!

Другие вопросы по тегам