在循环中使用回调的Javascript闭包访问

在循环中使用回调的Javascript闭包访问,javascript,angularjs,scope,Javascript,Angularjs,Scope,我该怎么做才能使最后一行代码返回一个值 $scope.runActionwithObjects = function() { for (var i = 0; i < $scope.Objects.length; i++) { console.log($scope.Objects[i]); //$scope is accessible $http.get($scope.Objects[i]["Commi

我该怎么做才能使最后一行代码返回一个值

$scope.runActionwithObjects = function() {

            for (var i = 0; i < $scope.Objects.length; i++) {
                console.log($scope.Objects[i]); //$scope is accessible
                $http.get($scope.Objects[i]["Commit"]).success(function (data) {
                    console.log($scope.Objects[i]);//return undefined
$scope.runActionwithObjects=function(){
对于(变量i=0;i<$scope.Objects.length;i++){
console.log($scope.Objects[i]);//$scope是可访问的
$http.get($scope.Objects[i][“Commit”]).success(函数(数据){
console.log($scope.Objects[i]);//返回未定义

您的
$scope.Objects[i]
未定义的原因是变量
i
总是=
$scope.Objects.lenth+1
,例如,您得到了5个元素,i将是6,因为在回调时,它已经得到了最后一个值

一种解决方案是将所需对象绑定到该方法,这样我们就可以通过
this
访问它(我们不能通过闭包直接引用
ref
变量,因为它仍然存储在最后一项中),例如:

           for (var i = 0; i < $scope.Objects.length; i++) {
               var ref = $scope.Objects[i];
               // console.log($scope.Objects[i]); //$scope is accessible
               var successCallback = (function (data) {
                   console.log(this);//return the ref

               }).bind(ref);
               $http.get('').success(successCallback);
           }
       }
for(变量i=0;i<$scope.Objects.length;i++){
var ref=$scope.Objects[i];
//console.log($scope.Objects[i]);//$scope是可访问的
var successCallback=(函数(数据){
console.log(this);//返回ref
}).bind(ref);
$http.get(“”).success(successCallback);
}
}

问题是由于ajax请求的异步性造成的

执行
success
回调时,循环已经完成,并且
i
变量已经等于
$scope.Objects.length

试试。此函数将为数组中的项创建不同的闭包

$scope.Objects.forEach(function(currentObject){
    console.log(currentObject); //$scope is accessible
    $http.get(currentObject["Commit"]).success(function (data) {
        console.log(currentObject);
    });
});

返回一个值到何处?(循环的其余部分和外部函数在哪里?)想象一下,这是循环的结束,还有另一段代码,我不想展示它,而是展示一个本身完整的简化示例。你是说你想要内部的
.success()
函数返回一个值给任何调用
.runActionwithObjects()
?请更清楚地说明您试图做什么。好的,我用小提琴给您演示,等等)非常感谢,这对我有帮助)@charlietfl:应该是
$scope.Objects.length