2017-08-06 97 views
0

我的$ onInit函数内我有两个函数来获取数据。我使用第三个函数,我需要前两个数据。我在第三个函数中执行的逻辑是将在屏幕上呈现的内容。如何在$ onInit中使用回调,并确保第三个函数在前两个之前不运行?

ctrl.$onInit = $onInit; 

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

     combineFoodAndDrinks(); 
    } 

编辑我的代码示例

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); 
    } 

回答

0

你还是考虑getFood & getDrinks方法返回的承诺,在这两种方法中承诺完成呼叫combineFoodAndDrinks。一般来说,代码片段如下所示。

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

谢谢Pankaj。我尝试过,但仍然无法工作。我在第一篇文章中添加了我的代码。管理员alwas返回空阵列,但我回到公司。 –

相关问题