2017-08-06 2 views
0

Dans ma fonction $ onInit, j'ai deux fonctions qui récupèrent des données. J'utilise la troisième fonction où j'ai besoin des données des deux premiers. La logique que je fais en troisième fonction est ce qui sera rendu à l'écran. Comment utiliser callback dans $ onInit et m'assurer que la troisième fonction n'est pas exécutée avant les deux premiers?

ctrl.$onInit = $onInit; 

    function $onInit() { 
     getFood(); 
     getDrinks(); 

     combineFoodAndDrinks(); 
    } 

EDIT MON CODE EXEMPLE

var ctrl = this; 
ctrl.company = {}; 
ctrl.company.administrators = []; 
ctrl.administrators = []; 
ctrl.$onInit = $onInit; 
.... 

function $onInit() { 
     $q.all([getCompanies(), getAdministrators()]).then(findAdministrators); 
     getUnasignedAdministrators(); 
    } 

    function getCompanies() { 
     companiesService.getCompanies() 
      .then(function (data) { 
       var company = data.items.find(function (company) { 
        if ($stateParams.id === company.id) { 
         return company; 
        } 
       }); 
       ctrl.company.name = company.name; 
       ctrl.company.contactPerson = { 
        firstName: company.contactPersonName, 
        lastName: company.contactPersonLastName, 
        phone: company.contactPersonPhone 
       }; 
      }) 
      .catch(function (response) { 
       responseService.displayError(response); 
      }); 
    } 

    function getAdministrators() { 
     administratorsService.getAdmins() 
      .then(function (data) { 
       ctrl.administrators = data.items; 
      }) 
      .catch(function (response) { 
       responseService.displayError(response); 
      }); 
    } 

    function findAdministrators() { 
     console.log("getCompanies", ctrl.company); 
     console.log("getAdministrators", ctrl.administrators); 
    } 

Répondre

0

Vous devriez plutôt envisager un retour de la promesse getFood & méthode getDrinks et appeler à la fin combineFoodAndDrinks de ces deux promesses de la méthode. En général, l'extrait de code ressemblera à ci-dessous.

ctrl.$onInit = $onInit; 

function getFood(){ 
    return $http.get('getFoodurl') 
} 

function getDrinks(){ 
    return $http.get('getDrinksurl') 
} 

function combineFoodAndDrinks(data){ 
    console.log("getFood data", data[0]) 
    console.log("getDrinks data", data[1]) 
} 

function $onInit() { 
    $q.all([getFood(), getDrinks()]).then(combineFoodAndDrinks); 
} 
+0

Merci Pankaj. Je l'ai essayé mais je n'arrive toujours pas à le faire fonctionner. J'ai ajouté mon code dans le premier message. Les administrateurs retournent tous les tableaux vides, mais je récupère les entreprises. –