Asynchroner Funktionsaufruf innerhalb von For-Schleifen in JavaScript
Die asynchrone Natur von JavaScript kann beim Aufruf asynchroner Funktionen innerhalb von For-Schleifen zu Herausforderungen führen. Betrachten Sie den folgenden Code:
for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }
Das Problem liegt bei der asynchronen Rückruffunktion, die möglicherweise ausgeführt wird, nachdem die for-Schleife abgeschlossen ist. Folglich verweist do_something(i) immer auf die letzte Iteration der Schleife.
Lösungsversuch mit Abschlüssen
Der Entwickler hat versucht, Abschlüsse zu verwenden, um den Wert von i zu erfassen innerhalb jeder Iteration der Schleife:
do_something((function(x){return x})(i))
Dieser Ansatz schlägt jedoch auch fehl, weil die Funktion sofort ausgeführt wird, was zum gleichen Problem führt.
Lösung mit forEach
Eine effizientere Lösung ist die Verwendung der forEach-Methode von JavaScript, die der Callback-Funktion das Array-Element und seinen Index bereitstellt. Da jeder Rückruf seinen eigenen Bereich hat, bleibt der Indexwert erhalten.
list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });
Durch die Verwendung von forEach haben die Rückruffunktionen jetzt Zugriff auf den richtigen Indexwert für jede Iteration, wodurch das Problem des falschen Index gelöst wird in der Funktion do_something referenziert.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit asynchronen Funktionsaufrufen in JavaScript-For-Schleifen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!