Maison  >  Article  >  interface Web  >  Comment gérer les appels de fonction asynchrones dans les boucles For JavaScript ?

Comment gérer les appels de fonction asynchrones dans les boucles For JavaScript ?

DDD
DDDoriginal
2024-10-28 03:54:30193parcourir

How to Handle Asynchronous Function Calls within JavaScript For Loops?

Invocation de fonctions asynchrones dans des boucles For en JavaScript

La nature asynchrone de JavaScript peut poser des défis lors de l'appel de fonctions asynchrones dans des boucles for. Considérez le code suivant :

for(var i = 0; i < list.length; i++){
    mc_cli.get(list[i], function(err, response) {
        do_something(i);
    });
}

Le problème réside dans la fonction de rappel asynchrone, qui peut s'exécuter une fois la boucle for terminée. Par conséquent, do_something(i) fera toujours référence à l'itération finale de la boucle.

Tentative de solution avec des fermetures

Le développeur a tenté d'utiliser des fermetures pour capturer la valeur de i au sein de chaque itération de la boucle :

do_something((function(x){return x})(i))

Cependant, cette approche échoue également car la fonction s'exécute immédiatement, ce qui entraîne le même problème.

Solution utilisant forEach

Une solution plus efficace consiste à utiliser la méthode forEach de JavaScript, qui fournit l'élément du tableau et son index à la fonction de rappel. Puisque chaque rappel a sa propre portée, la valeur d'index est préservée.

list.forEach(function(listItem, index){
  mc_cli.get(listItem, function(err, response) {
    do_something(index);
  });
});

En utilisant forEach, les fonctions de rappel ont désormais accès à la valeur d'index correcte pour chaque itération, résolvant ainsi le problème de l'index incorrect. référencé dans la fonction do_something.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn