Ich habe den folgenden Code:Aufruf eine asynchrone Funktion innerhalb eines for-Schleife in JavaScript
for(var i = 0; i < list.length; i++){
mc_cli.get(list[i], function(err, response) {
do_something(i);
});
}
mc_cli
ist eine Verbindung zu einer Memcached-Datenbank. Wie Sie sich vorstellen können, ist die Callback-Funktion asynchron und kann daher ausgeführt werden, wenn die for-Schleife bereits beendet wurde. Wenn Sie auf diese Weise do_something(i)
aufrufen, wird immer der letzte Wert der for-Schleife verwendet.
Ich habe versucht, mit einem Verschluss auf diese Weise
do_something((function(x){return x})(i))
aber anscheinend diese wieder verwendet immer den letzten Wert des Index der for-Schleife.
Ich versuchte auch, wie so eine Funktion vor dem for-Schleife erklärt:
var create_closure = function(i) {
return function() {
return i;
}
}
und dann
do_something(create_closure(i)())
Aufruf aber wieder ohne Erfolg, mit dem Rückgabewert immer der letzte Wert des Wesen für die Schleife.
Kann mir jemand sagen, was mache ich falsch mit Schließungen? Ich dachte, ich hätte sie verstanden, aber ich kann mir nicht vorstellen, warum das nicht funktioniert.
vielen Dank ausgelöst Kumpel stoppen! Dieser Code hat mich gerettet !!! : D – DDave
@joseph du Verstand klingt großartig. Können Sie mir diesen Teil von mir erklären? "Iteration wird einen eigenen Umfang haben"? –