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

1 回答 1

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);
}
于 2017-08-06T18:02:43.597 回答