我对Angular承诺存在问题,需要帮助才能最好地使用它们。
我有一个onerror
从服务器端检索数据,如下所示:
domainService
我有parentsNeeds: function () {
return $http.get('/api/utils/parents-needs', {
cache: true
});
},
使用constantsService
以便将数组转换为对象,如下所示:
domainService
在UI路由器配置中,我有以下决心:
.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)
};
}]);
在我的控制器中,我注入resolve: {
constants: ['constantsService', function (constantsService) {
return {PARENTS_NEEDS: constantsService.PARENTS_NEEDS};
}]
}
解析并按如下方式使用它:
constants
问题是我的控制器中可用的constants.PARENTS_NEEDS.then(function(param){
var PARENTS_NEEDS = param;
});
var是从promise中获得的,我必须在回调函数中使用pass来传递then方法,PARENTS_NEEDS
var只是在回调范围内可用。
有人可以帮忙吗?
答案 0 :(得分:0)
感谢Charlietfl&amp; 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