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 循环内部的环回回调_Javascript_Angularjs - Fatal编程技术网

Javascript 循环内部的环回回调

Javascript 循环内部的环回回调,javascript,angularjs,Javascript,Angularjs,在for循环中,我调用一个环回函数(model.find())并使用回调方法。在这个方法中,我需要for循环的I变量来指定一个变量,但它不能从闭包访问。 我已经尝试过在回调函数后面编写(I)或调用(this,I),但没有成功 for (var i = 0; i < $scope.objects.length; i++) { Priority.find({ filter: {

在for循环中,我调用一个环回函数(model.find())并使用回调方法。在这个方法中,我需要for循环的I变量来指定一个变量,但它不能从闭包访问。 我已经尝试过在回调函数后面编写
(I)
调用(this,I)
,但没有成功

for (var i = 0; i < $scope.objects.length; i++) {
                    Priority.find({
                        filter: {
                            where: {priority: $scope.selectedPriority[i].priority}
                        }
                    }, function (prios) {
                            Priority.create({"priority": $scope.selectedPriority[i].priority //i is not accessible
                            }, function (priority) {
                                $scope.selectedPriority[i].priority = undefined; //i is not accessible
                            }, function (error) {
                                console.log(error);
                            });
                        }
                    });

        }
for(变量i=0;i<$scope.objects.length;i++){
优先权。查找({
过滤器:{
其中:{priority:$scope.selectedPriority[i].priority}
}
},功能(prios){
Priority.create({“Priority”:$scope.selectedPriority[i]。Priority//i不可访问
},功能(优先级){
$scope.selectedPriority[i].priority=undefined;//无法访问i
},函数(错误){
console.log(错误);
});
}
});
}
实际上应该定义“i”,但您总是会在其最高值($scope.objects.length-1)处找到它,原因是由于Priority.find是异步的,一旦它返回一个答案,for循环就已经完成了迭代

要解决这个问题,可以将循环体放在函数中:

 function find(i) {
    Priority.find({
                            filter: {
                                where: {priority: $scope.selectedPriority[i].priority}
                            }
                       }, function (prios) {
                               Priority.create({"priority": $scope.selectedPriority[i].priority //i is not accessible
                               }, function (priority) {
                                  $scope.selectedPriority[i].priority = undefined; //i is not accessible
                              }, function (error) {
                                 console.log(error);
                              });
                         }
                      });
}
因此,for循环变成:

for (var i = 0; i < $scope.objects.length; i++) {
    find(i);
}
for(变量i=0;i<$scope.objects.length;i++){
发现(i);
}
本质上,您正在“捕获”i的值并将其作为函数参数发送,只要您处于特定函数调用的上下文中,i就保持不变

实际上应该定义“i”,但您总是会在其最高值($scope.objects.length-1)处找到它,原因是由于Priority.find是异步的,一旦它返回一个答案,for循环就已经完成了迭代

要解决这个问题,可以将循环体放在函数中:

 function find(i) {
    Priority.find({
                            filter: {
                                where: {priority: $scope.selectedPriority[i].priority}
                            }
                       }, function (prios) {
                               Priority.create({"priority": $scope.selectedPriority[i].priority //i is not accessible
                               }, function (priority) {
                                  $scope.selectedPriority[i].priority = undefined; //i is not accessible
                              }, function (error) {
                                 console.log(error);
                              });
                         }
                      });
}
因此,for循环变成:

for (var i = 0; i < $scope.objects.length; i++) {
    find(i);
}
for(变量i=0;i<$scope.objects.length;i++){
发现(i);
}
本质上,您正在“捕获”i的值并将其作为函数参数发送,只要您处于特定函数调用的上下文中,i就保持不变