一一执行解析器?

时间:2019-04-26 22:44:41

标签: angularjs

在以下代码中,我有两个解析器:loggedinowner

   .when('/admin/deals/my-deals', {
        templateUrl: 'views/assessment/assessments_my_test.html',
        controller: 'DealTestController',
        resolve: {
            loggedin: checkAdminin,
            owner: getOwnerByEmail
        }
    })

它们并行运行,但是我需要首先等待loggedin,然后才运行owner。 如何实现?

2 个答案:

答案 0 :(得分:0)

您可以兑现承诺。现在,这些是路由的特殊承诺,我没有设置用于在angularjs中对此进行测试的环境,但它确实可以在普通JavaScript中工作。值得尝试以下方法:

resolve: {
  loggedin: checkAdminin.then(getOwnerByEmail)
}

您将不得不以某种方式链接两个诺言,否则它们将异步运行。

答案 1 :(得分:0)

要顺序运行两个异步函数,需要将它们链接在一起:

.when('/admin/deals/my-deals', {
    templateUrl: 'views/assessment/assessments_my_test.html',
    controller: 'DealTestController',
    resolve: {
        both: function() {
            var result = {};
            var promise = checkAdmin();
            var p2 = promise.then(function(data) {
                result.loggedin = data;
                return getOwnerByEmail();
            });
            var p3 = p2.then(function(data) {
                result.owner = data;
                return result;
            });
            return p3;
         }
     }
})

两个promise都需要在一个复合解析器函数中调用和解析。 both函数用一个对象解析:

{ loggedin: <data from checkAdmin>,
  owner:    <data from getOwnerByEmail>
}