Javascript for循环完成后调用函数
我正在尝试调用函数Javascript for循环完成后调用函数,javascript,angularjs,http,angular-promise,Javascript,Angularjs,Http,Angular Promise,我正在尝试调用函数$scope.getThisFunction($scope.Num)在for循环完成后,我尝试了下面的代码,但没有工作。有什么建议吗 for(var i = 0; i < $scope.selection.length; i++) { $http({ method: "POST", url: '/url/' + $scope.Num + '/' + $scope.selection[i] })
$scope.getThisFunction($scope.Num)
在for循环完成后,我尝试了下面的代码,但没有工作。有什么建议吗
for(var i = 0; i < $scope.selection.length; i++) {
$http({
method: "POST",
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
}).then(function mySucces(response) {
if(i == $scope.selection.length - 1) {
$scope.getThisFunction($scope.Num); //not working
}
}, function myError(response) {
alert("SORRY, SOME TECHNICAL ERROR OCCUR");
});
}
for(var i=0;i<$scope.selection.length;i++){
$http({
方法:“张贴”,
url:'/url/'+$scope.Num+'/'+$scope.selection[i]
}).然后(函数mySucces(响应){
如果(i=$scope.selection.length-1){
$scope.getThisFunction($scope.Num);//不工作
}
},函数myError(响应){
警报(“对不起,发生了一些技术错误”);
});
}
创建单独的函数,并在该函数中使用http请求。因为当for循环在它周围时引用相同的引用。即使它创建了新的闭包,它也有相同的引用。所以它只取for循环的最后一个索引
for (var i = 0; i < $scope.selection.length; i++) {
sendReq(i)
};
function sendReq(i) {
$http({
method: "POST",
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
}).then(function mySucces(response) {
if (i == $scope.selection.length - 1) {
$scope.getThisFunction($scope.Num); //not working
}
}, function myError(response) {
alert("SORRY, SOME TECHNICAL ERROR OCCUR");
});
}
for(变量i=0;i<$scope.selection.length;i++){
sendReq(一)
};
函数sendReq(i){
$http({
方法:“张贴”,
url:'/url/'+$scope.Num+'/'+$scope.selection[i]
}).然后(函数mySucces(响应){
if(i=$scope.selection.length-1){
$scope.getThisFunction($scope.Num);//不工作
}
},函数myError(响应){
警报(“对不起,发生了一些技术错误”);
});
}
创建单独的函数,并在该函数中使用http请求。因为当for循环在它周围时引用相同的引用。即使它创建了新的闭包,它也有相同的引用。所以它只取for循环的最后一个索引
for (var i = 0; i < $scope.selection.length; i++) {
sendReq(i)
};
function sendReq(i) {
$http({
method: "POST",
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
}).then(function mySucces(response) {
if (i == $scope.selection.length - 1) {
$scope.getThisFunction($scope.Num); //not working
}
}, function myError(response) {
alert("SORRY, SOME TECHNICAL ERROR OCCUR");
});
}
for(变量i=0;i<$scope.selection.length;i++){
sendReq(一)
};
函数sendReq(i){
$http({
方法:“张贴”,
url:'/url/'+$scope.Num+'/'+$scope.selection[i]
}).然后(函数mySucces(响应){
if(i=$scope.selection.length-1){
$scope.getThisFunction($scope.Num);//不工作
}
},函数myError(响应){
警报(“对不起,发生了一些技术错误”);
});
}
我真的不确定你想要完成什么。在您的示例中,您必须使用
if (i === $scope.selection.length)
但这将触发多次,因为当每个承诺都解决时,条件很可能总是正确的
您应该使用$q.all并向其传递一系列承诺$q是一个角度服务,您只需要注入它
未经测试:
var promises = []
for (var i = 0; i < $scope.selection.length; i++) {
promises.push($http({
method: 'POST',
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
});
}
$q.all(promises).then(function() {
$scope.getThisFunction($scope.Num);
}, function() {
alert('Error')
});
var承诺=[]
对于(变量i=0;i<$scope.selection.length;i++){
承诺。推送($http)({
方法:“POST”,
url:'/url/'+$scope.Num+'/'+$scope.selection[i]
});
}
$q.all(承诺)。然后(函数(){
$scope.getThisFunction($scope.Num);
},函数(){
警报('错误')
});
编辑:
var promises = []
for (var i = 0; i < $scope.selection.length; i++) {
promises.push($http({
method: 'POST',
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
});
}
$q.all(promises).then(function() {
$scope.getThisFunction($scope.Num);
}, function() {
alert('Error')
});
我看到您接受了另一个答案。让我告诉您,只保留代码并用Let替换var比使用函数闭包更容易。当然,只有在ES6环境中工作时,这才有效
for(let i = 0; i < $scope.selection.length; i++)
...
for(设i=0;i<$scope.selection.length;i++)
...
我不确定您想要完成什么。在您的示例中,您必须使用
if (i === $scope.selection.length)
但这将触发多次,因为当每个承诺都解决时,条件很可能总是正确的
您应该使用$q.all并向其传递一系列承诺。$q是一个角度服务,您只需注入它
未经测试:
var promises = []
for (var i = 0; i < $scope.selection.length; i++) {
promises.push($http({
method: 'POST',
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
});
}
$q.all(promises).then(function() {
$scope.getThisFunction($scope.Num);
}, function() {
alert('Error')
});
var承诺=[]
对于(变量i=0;i<$scope.selection.length;i++){
承诺。推送($http)({
方法:“POST”,
url:'/url/'+$scope.Num+'/'+$scope.selection[i]
});
}
$q.all(承诺)。然后(函数(){
$scope.getThisFunction($scope.Num);
},函数(){
警报('错误')
});
编辑:
var promises = []
for (var i = 0; i < $scope.selection.length; i++) {
promises.push($http({
method: 'POST',
url: '/url/' + $scope.Num + '/' + $scope.selection[i]
});
}
$q.all(promises).then(function() {
$scope.getThisFunction($scope.Num);
}, function() {
alert('Error')
});
我看到您接受了另一个答案。让我告诉您,只保留代码并用Let替换var比使用函数闭包更容易。当然,只有在ES6环境中工作时,这才有效
for(let i = 0; i < $scope.selection.length; i++)
...
for(设i=0;i<$scope.selection.length;i++)
...
在for循环中进行HTTP POST不是一个好主意。您应该重写API以在一个唯一调用中接受多个选择。@Pratyush Pranjal您想要$scope.getthis函数($scope.Num)
在循环的最后一个元素或帖子的最后一个响应中调用?如果希望在最后一个帖子响应时调用,请尝试使用承诺($q.all
)在for循环中进行HTTP POST不是一个很好的主意。您应该重写API,以便在一个唯一调用中接受多个选择。@Pratyush Pranjal您想要$scope.getthis函数($scope.Num)
在循环的最后一个元素或帖子的最后一个响应中调用?如果希望在最后一个帖子响应时调用,请尝试使用承诺($q.all
)否决者的副本,如果不理解问题,请留下。伟大的循环概念,工作完美..!!感谢否决者,如果不理解问题,请留下。伟大的循环概念,工作完美..!!谢谢