2017-01-30 70 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」並將其作爲函數參數發送,只要您處於特定函數調用的上下文中,則我保持不變。