在循环内围绕 angular 数据服务调用时换行 jquery
wrap jquery when around angular data service calls within loop
所以我有一个页面,一个动作需要多次 ajax 调用。 angular dataService.getData 被调用,它使用 $q/deferred 像这样:
return {
getData: function(obj) {
var def = $q.defer();
$http({
url: obj.url,
method: "GET",
headers: { "Content-Type": "application/json" }
}).then(function(data) {
if (data.data) {
def.resolve({
response: data
})
}
})
return def.promise;
}
}
有一次我需要从控制器对一组项目调用几个单独的请求:
$scope.goGetEmBoys = function(group) {
config.group.forEach(function(d) {
if(d.name == group) {
dataService.getData({url: d.urlToCall})
.then(function(data){
// use each with its own registered callback
d.callback(data);
})
}
})
}
我想做的是有一个 bitValue 在请求工作和完成时切换,即使我必须存储类似 $scope.somethingIsHappening = 0 等的东西
我认为将它包装在 $.when deferred 中看起来是一种合理的方法,但我一直无法让它工作,还有比尝试适应调用更好的方法吗(goGetEmBoys 函数和最终的循环)在这样的延迟中?
尝试了对作用域函数的调用,以及 jquery 中的代码块……我一定是用错了。欢迎任何建议。
我不知道我是否完全理解你想要实现的目标 - 你想知道所有请求何时完成?如果 group
的长度不变,您可以尝试以下操作:
$scope.areReqestsFinished = false;
$scope.goGetEmBoys = function(group) {
var counter = 0;
config.group.forEach(function(d) {
if(d.name == group) {
dataService.getData({url: d.urlToCall})
.then(function(data){
// use each with its own registered callback
d.callback(data);
counter++;
if (counter === config.group.length) {
$scope.areRequestFinished = true;
}
})
}
})
}
并且您可以在 $scope.areRequestFinished
上设置 $scope.$watch
以在请求完成时采取行动。你也可以玩 $q.all
但我从来没有让它为我工作,而且我认为我的解决方案很容易弄清楚,即使它需要更多代码。手表可以这样:
$scope.$watch('areRequestFinished', function (newValue, oldValue) {
if ((newValue !== oldValue) && (newValue === true)) {
doSomething();
}
});
所以我有一个页面,一个动作需要多次 ajax 调用。 angular dataService.getData 被调用,它使用 $q/deferred 像这样:
return {
getData: function(obj) {
var def = $q.defer();
$http({
url: obj.url,
method: "GET",
headers: { "Content-Type": "application/json" }
}).then(function(data) {
if (data.data) {
def.resolve({
response: data
})
}
})
return def.promise;
}
}
有一次我需要从控制器对一组项目调用几个单独的请求:
$scope.goGetEmBoys = function(group) {
config.group.forEach(function(d) {
if(d.name == group) {
dataService.getData({url: d.urlToCall})
.then(function(data){
// use each with its own registered callback
d.callback(data);
})
}
})
}
我想做的是有一个 bitValue 在请求工作和完成时切换,即使我必须存储类似 $scope.somethingIsHappening = 0 等的东西
我认为将它包装在 $.when deferred 中看起来是一种合理的方法,但我一直无法让它工作,还有比尝试适应调用更好的方法吗(goGetEmBoys 函数和最终的循环)在这样的延迟中?
尝试了对作用域函数的调用,以及 jquery 中的代码块……我一定是用错了。欢迎任何建议。
我不知道我是否完全理解你想要实现的目标 - 你想知道所有请求何时完成?如果 group
的长度不变,您可以尝试以下操作:
$scope.areReqestsFinished = false;
$scope.goGetEmBoys = function(group) {
var counter = 0;
config.group.forEach(function(d) {
if(d.name == group) {
dataService.getData({url: d.urlToCall})
.then(function(data){
// use each with its own registered callback
d.callback(data);
counter++;
if (counter === config.group.length) {
$scope.areRequestFinished = true;
}
})
}
})
}
并且您可以在 $scope.areRequestFinished
上设置 $scope.$watch
以在请求完成时采取行动。你也可以玩 $q.all
但我从来没有让它为我工作,而且我认为我的解决方案很容易弄清楚,即使它需要更多代码。手表可以这样:
$scope.$watch('areRequestFinished', function (newValue, oldValue) {
if ((newValue !== oldValue) && (newValue === true)) {
doSomething();
}
});