我搜索过高低,但我似乎无法围绕q.defer()并创建我自己的承诺。
我有一个服务getDataService
,它可以完全从REST服务器获取$http.gets
数据。但是,每次只能发送一个变量,因此如果用户想要查询服务器两个实体并返回整个关联数据,则必须发送两个请求。因此我不得不使用一种方法,将i
作为实际计数(闭包),然后运行我的获取数据函数适当的次数:
keepICorrect: function (security) {
var self = this;
for (var i = 0 ; i < entity.length; i++) {
self.getDataFromREST(security, i);
}
},
我从主控制器那里称之为承诺:
$scope.apply = function (security) {
var myDataPromise = getDataService.keepICorrect(security);
myDataPromise.then(function () {
//DO STUFF
}, 1);
}, function (error) {
alert("Error Retrieving Data");
return $q.reject(error);
});
}
这在使用.getDataFromREST()
时起作用,但显然现在没有,因为我必须通过我的新循环函数keepICorrect()
。
我的问题是我是如何创建一个从我的服务到我的控制器的承诺,但不仅如此,还等待解决或失败,具体取决于i
请求的数量是否已完成? / p>
答案 0 :(得分:1)
你需要创建一个承诺数组
keepICorrect: function (security) {
var self = this;
var promises = [];
for (var i = 0 ; i < entity.length; i++) {
promises.push(self.getDataFromREST(security, i));
}
return promises;
},
然后等待所有人使用Angular中的$q
库完成
$q.all(getDataService.keepICorrect(security))
.then(....