setTimeout et de la matrice de chaque
Je suis confus avec l'aide de setTimeout et la chaque itérateur. Comment puis-je réécrire le suivant de sorte que la console de sorties de chaque nom, après un délai de 5 secondes? Actuellement, le code ci-dessous imprime tous les noms à la fois au bout de 5 secondes. Je voudrais:
1) attendre 5 secondes, puis l'imprimer kevin
2) attendre 5 secondes, puis l'imprimer mike
3) attendre 5 secondes, puis l'imprimer sally
var ary = ['kevin', 'mike', 'sally'];
_(ary).each(function(person){
setTimeout(function(){
console.log(person);
}, 5000);
});
OriginalL'auteur Kevin | 2013-06-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer une variable appelée
offset
qui fait de la minuterie attendre 5 secondes de plus pour chaque personne dans le tableau, comme suit:Exactement.
each
s'exécute trois fois, et à chaque foisoffset
obtient 5000 plus grande, de sorte que le délai d'attente pour chaque consécutives personne est de 5 secondes plus tard.OriginalL'auteur LonelyWebCrawler
Vous pourriez faire
Sans augmenter la
timeout
valeur, vous initialiser tous lessetTimeouts
avec la même valeur (c'est pourquoi vous voyez ce que vous voyez).OriginalL'auteur jAndy
each
est généralement mieux pour les choses qui se produisent immédiatement.Au lieu de cela, si vous n'avez pas l'esprit de changer le tableau, vous pouvez l'utiliser comme une file d'attente:
Il continue à appeler
loop
5 secondes dans le futur jusqu'à ce qu'il ne reste plus rien dans la file d'attente.OriginalL'auteur Casey Chu
Vous pouvez simplement utiliser setInterval() avec une simple augmentation par un compteur.
Mais notez que cela commencera à lancer des erreurs après je devient supérieur à deux. Vous avez besoin d'avoir une sorte de validation et assurez-vous de vider l'intervalle.
setInterval
de rappel àclearInterval
lorsque le tableau a été épuisé.OriginalL'auteur php_nub_qq