J'essaie d'écrire un code simple avec un setTimeout
, mais le setTimeout
n'attendra pas le temps qu'il suppose et le code s'exécutera immédiatement. Qu'est-ce que je fais mal?
setTimeout(testfunction(), 2000);
Vous appelez la fonction immédiatement et planifiez sa valeur de retour.
Utilisation:
setTimeout(testFunction, 2000);
^
Remarque: pas de parens.
Supprimer la parenthèse
setTimeout(testfunction(), 2000);
Si vous souhaitez envoyer des paramètres à la fonction, vous pouvez créer une fonction anonyme qui appellera alors la fonction souhaitée.
setTimeout(function() {
testfunction('hello');
}, 2000);
Modifier
Quelqu'un a suggéré d'envoyer une chaîne comme premier paramètre de setTimeout. Je suggère de ne pas suivre cela et de ne jamais envoyer de chaîne comme premier paramètre setTimeout, car la fonction eval sera utilisée. C'est une mauvaise pratique et devrait être évitée si possible.
Supprimez la parenthèse après le nom de la fonction de test:
setTimeout(testfunction, 2000);
La raison en est que le premier argument de setTimeout doit être une fonction référence, pas la valeur de retour de la fonction. Dans votre code, testfunction
est appelé immédiatement et la valeur de retour est envoyée à setTimeout.
Eh bien, vous avez peut-être obtenu la réponse, mais j'explique la cause et la solution. Il existe deux façons d'appeler une fonction après un laps de temps requis.
1. setTimeout ("FUNC_NAME () ', TIME_IN_MS);
Ici FUNC_NAME entre guillemets doubles est la fonction d'origine que vous souhaitez appeler après TIME_IN_MS millisecondes. En effet, si vous ne mettez pas les guillemets, alors que Java est en train d'être interprété, la fonction sera immédiatement exécutée et votre objectif sera vaincu. Pour laisser l'interprète sauter l'instruction, nous devons mettre des guillemets ici.
2. setTimeout (fonction () {FUNC_NAME ()}, TIME_IN_MS);
Ici, une fonction anonyme est créée qui indique à l'interprète de s'exécuter après un certain temps au lieu d'évaluer le temps.
Merci shaILU