Heim  >  Artikel  >  Web-Frontend  >  Wie gehe ich mit asynchronen Funktionsaufrufen in JavaScript-For-Schleifen um?

Wie gehe ich mit asynchronen Funktionsaufrufen in JavaScript-For-Schleifen um?

DDD
DDDOriginal
2024-10-28 03:54:30193Durchsuche

How to Handle Asynchronous Function Calls within JavaScript For Loops?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn