2017-05-25 1 views
-1

Dites que j'ai trois fonctions que je veux exécuter en séquence 5 fois en attente d'une seconde entre chacune et la première prend la variable dans la boucle for comme argument. Quelque chose comme ceci:Exécuter trois fonctions distinctes dans la boucle for avec des délais

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },1000); 
    setTimeout(function(){ 
     two(); 
    },2000); 
    setTimeout(function(){ 
     three(); 
    },3000); 
} 

J'ai essayé ceci et cela ne semble pas fonctionner. Comment puis-je réparer cela?

+0

Une approche serait appeler la fonction 'deux()' partir avec un délai d'attente au sein de la fonction 'un()', et la fonction 'trois()' avec un délai d'attente depuis la fonction 'two()'. –

Répondre

1

setTimeout() met en place une minuterie pour exécuter une fonction dans l'avenir, mais retourne immédiatement, de sorte que votre fonction se déroulera one() 5 fois après 1 seconde, two() 5 fois après 2 secondes et three() 5 fois après 3 secondes.

Vous pouvez atteindre votre objectif avec

for (var i=0; i<5; i++) { 
    setTimeout(function(){ 
     one(i); 
    },(i * 3 + 1) * 1000); 
    setTimeout(function(){ 
     two(); 
    },(i * 3 + 2) * 1000); 
    setTimeout(function(){ 
     three(); 
    },(i * 3 + 3) * 1000); 
} 
+0

Cela fonctionne parfaitement! Pouvez-vous m'expliquer comment vous définissez les intervalles afin que je puisse mieux le comprendre? Merci beaucoup – user3385777

+1

Tous les événements sont mis en place immédiatement, donc tous les événements sont relatifs à l'heure de début. Si nous ignorons le '* 1000' (qui convertit juste ms en secondes), nous sommes juste en positionnant à (i * 3) (ie 3 secondes pour chacune des 5 boucles) plus 1, 2 ou 3 secondes pour les fonctions un(), deux() et trois() – mykel