2017-01-30 8 views
1

In einer For-Schleife rufe ich eine Loopback-Funktion (model.find()) auf und verwende die Callback-Methode. In dieser Methode brauche ich die i-Variable der for-Schleife, um eine Variable zu spezifizieren, aber es ist nicht von der Schließung zugänglich. Ich habe bereits versucht, (i) oder call(this,i) hinter der Callback-Funktion zu schreiben, aber es hat nicht funktioniert.Loopback Callback innerhalb For-Loop

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

     } 

Antwort

0

Eigentlich „i“ definiert werden, aber Sie werden es immer auf dem höchsten Wert finden (= $ scope.objects.length - 1), ist der Grund, dass seit Priority.find asynchron ist, sobald es gibt eine Antwort zurück, die for-Schleife hat bereits iteriert.

es zu lösen, könnten Sie Körper der Schleife in einer Funktion setzen:

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

So dann, die for-Schleife wird:

for (var i = 0; i < $scope.objects.length; i++) { 
    find(i); 
} 

im Wesentlichen, sind Sie "Erfassen", um die Wert von "i" und senden Sie es als Funktion Argument, solange Sie im Kontext eines bestimmten Funktionsaufrufs sind, bleibt ich fest.