在具有多个 $http.get 的服务中使用 promise with closure
Using promise with closure in service with multiple $http.get
我到处搜索,但似乎无法全神贯注 q.defer() 并做出自己的承诺。
我有一项服务 getDataService
正是这样做的 - 来自 REST 服务器的 $http.gets
数据。但是一次只能发送一个变量,所以如果用户想查询服务器的两个实体和 return 整个关联数据,他们必须发送两个请求。因此,我不得不使用一种将 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
数量的请求是否已完成?
您需要创建一个承诺数组
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(....
我到处搜索,但似乎无法全神贯注 q.defer() 并做出自己的承诺。
我有一项服务 getDataService
正是这样做的 - 来自 REST 服务器的 $http.gets
数据。但是一次只能发送一个变量,所以如果用户想查询服务器的两个实体和 return 整个关联数据,他们必须发送两个请求。因此,我不得不使用一种将 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
数量的请求是否已完成?
您需要创建一个承诺数组
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(....