Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环完成后调用函数_Javascript_Angularjs_Http_Angular Promise - Fatal编程技术网

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
)否决者的副本,如果不理解问题,请留下。伟大的循环概念,工作完美..!!感谢否决者,如果不理解问题,请留下。伟大的循环概念,工作完美..!!谢谢