Maison > interface Web > js tutoriel > le corps du texte

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

DDD
Libérer: 2024-10-28 03:54:30
original
191 Les gens l'ont consulté

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);
    });
}
Copier après la connexion

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))
Copier après la connexion

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);
  });
});
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!