[英]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.