[英]Loopback Callback inside For-Loop
在for循环中,我调用一个loopback函数(model.find())并使用回调方法。 在这个方法中,我需要for循环的i变量来指定一个变量但是它不能从闭包中访问。 我已经尝试在回调函数后写(i)
或call(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);
});
}
});
}
实际上应该定义“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);
}
实际上,你正在“捕获”“i”的值并将其作为函数参数发送,只要你在特定函数调用的上下文中,我就会保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.