如何使用 UI 路由器在传递给控制器​​之前解决承诺

How to use a UI router in order to resolve a promise before it is passed to the controller

我对 Angular promises 有疑问,需要有关如何最好地使用它们的帮助。

我有一个 domainService 从服务器端检索数据,如下所示:

parentsNeeds: function () {
    return $http.get('/api/utils/parents-needs', {
        cache: true
    });
},

我有一个 constantsService,它使用 domainService 来将数组转换为对象,如下所示:

.factory('constantsService', ['domainService', '$q', function (domainService, $q) {

        var convertToObject = function (param) {
            var parentsNeeds = {};
            for (var i = 0; i < param.data.length; i++) {
                parentsNeeds[param.data[i]] = i;
            }
            return parentsNeeds;
        };
        return {
            PARENTS_NEEDS: domainService.parentsNeeds().then(convertToObject)
        };
    }]);

在UI路由器配置中,我有如下解析:

resolve: {
    constants: ['constantsService', function (constantsService) {
        return {PARENTS_NEEDS: constantsService.PARENTS_NEEDS};
    }]
}

在我的控制器中,我注入 constants 解析并按如下方式使用它:

constants.PARENTS_NEEDS.then(function(param){
   var PARENTS_NEEDS = param;
});

问题是我的控制器中可用的 PARENTS_NEEDS var 是从承诺中获得的,我必须使用 pass 回调到 then 方法,PARENTS_NEEDS var仅在回调范围内可用。

有人可以帮忙吗?

感谢 Charlietfl 和 Okazari 的建议和评论,我得出了以下结论:

我重新设计的服务:

.factory('constantsService', ['domainService', '$q', function (domainService, $q) {

    var convertToObject = function (param) {
        var object = {};
        for (var i = 0; i < param.data.length; i++) {
            object[param.data[i]] = i;
        }
        return object;
    };

    var PARENTS_NEEDS = domainService.parentsNeeds().then(convertToObject);
    var CHILDCARE_WORKER_TYPES = domainService.childcareWorkerTypes().then(convertToObject);
    //and so on and so forth...


    return {
        constants: $q.all({PARENTS_NEEDS: PARENTS_NEEDS, CHILDCARE_WORKER_TYPES: CHILDCARE_WORKER_TYPES})
    };
}]);

在我的 UI 路由器中:

constants: ['constantsService', function (constantsService) {
    return constantsService.constants;
}]

然后我在我的控制器中得到一个很好的 constants 对象(已解决的承诺)。该对象包含两个常量:

Object {PARENTS_NEEDS: Object, CHILDCARE_WORKER_TYPES: Object}CHILDCARE_WORKER_TYPES: ObjectASSISTANTE_MATERNELLE: 1AUXILIAIRE_PARENTALE: 0AU_PAIR: 3BABY_SITTER: 2__proto__: ObjectPARENTS_NEEDS: ObjectPARENTS_TO_CHILDCARE_WORKER: 0PARENTS_TO_PARENTS: 1__proto__: Object__proto__: Object