我有一个工厂,它返回一个具有多个属性的对象。但是每个属性值都是通过 ajax 调用计算的,在某些情况下,我会承诺链接以设置属性值。在我返回对象之前,我如何确保所有 ajax 调用都已完成,以便分配属性值
我的工厂看起来像这样
app.factory('Resource', ['$http', '$q', function ($http, $q) {
var Resource = {
masterDB: null,
replicaDB: null,
replicaCluster: null,
masterForests: null,
forestHosts:{}
};
Resource.setMasterDB = function (dbname) {
console.log('inside setMasterDB', dbname);
this.masterDB = dbname;
};
Resource.getResources = function (dbname) {
var url = '/manage/v2/databases/'+ dbname + '?format=json';
$http.get(url).then(function (response) {
Resource.masterForests = getAttachedForests(response.data);
console.warn('Master Forests = ', Resource.masterForests);
return response;
}).then(function (response) {
Resource.replicaCluster = getReplicaClusters(response.data);
console.warn('Replica Cluster = ',Resource.replicaCluster);
}).then(function () {
console.log('final then', Resource.masterForests);
var reqs = function () {
var arr = [];
angular.forEach(Resource.masterForests, function(forestName){
arr.push($http.get('/manage/v2/forests/'+ forestName + '?format=json'));
});
return arr;
}.call();
console.log('reqs = ', reqs);
$q.all(reqs).then(function (results) {
console.warn(results);
angular.forEach(results, function(result){
console.log('HOST', getForestHost(result.data));
});
return results;
});
});
};
console.warn('RESOURCES: ', JSON.stringify(Resource));
return Resource;
}]);