2017-01-30 39 views
1

在for循环中,我调用一个回环函数(model.find())并使用回调方法。在这个方法中,我需要for循环的i变量来指定一个变量,但是它不能从闭包访问。 我已经尝试在回调函数后面编写(i)call(this,i),但它不起作用。For-Loop中的Loopback回调

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); 
          }); 
         } 
        }); 

     } 

回答

0

其实“我”应该被定义,但你总是在其最高值找到它(= $ 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”并将其作为函数参数发送,只要您处于特定函数调用的上下文中,则我保持不变。