En JavaScript, l'exécution de fonctions asynchrones dans les boucles for peut être délicate en raison de problèmes de fermeture. Examinons un scénario courant et explorons comment y remédier en utilisant la bonne approche.
Considérez le code suivant :
<code class="javascript">for(var i = 0; i < list.length; i++){ mc_cli.get(list[i], function(err, response) { do_something(i); }); }</code>
Ici, la fonction asynchrone mc_cli.get() est invoquée dans une boucle for. Cependant, lorsque le rappel est exécuté, la valeur de i peut avoir changé en raison de la nature asynchrone de la fonction.
Pour résoudre ce problème, les fermetures doivent être utilisées correctement. L'utilisation incorrecte des fermetures, comme tenté dans le code fourni, entraîne l'utilisation répétée de la dernière valeur de i.
L'approche correcte consiste à utiliser forEach() au lieu d'une boucle for. forEach() fournit à la fois l'élément de liste et son index dans le rappel, garantissant que chaque itération conserve sa propre portée.
<code class="javascript">list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });</code>
Dans cette approche, chaque rappel dans forEach() fait référence à sa propre valeur d'index unique, résoudre les problèmes de fermeture et garantir que do_something() reçoit toujours la valeur d'index correcte.
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!