C’est là une manière de configurer le `` méthode de javascript pour exécuter la méthode immédiatement, puis l’exécute avec la minuterie
Réponses
Trop de publicités?Il est plus simple de simplement appeler la fonction directement la première fois:
foo();
setInterval(foo, delay);
Cependant, il existe de bonnes raisons pour éviter setInterval
- en particulier dans certaines circonstances, un chargement entier de setInterval
événements peuvent arriver immédiatement les uns après les autres sans aucun retard. Une autre raison est que si vous voulez arrêter la boucle que vous avez à appeler explicitement clearInterval
ce qui signifie que vous devez vous rappeler le handle retourné à partir de l'original setInterval
appel.
Si une autre méthode est de disposer d' foo
déclencheur lui-même pour la suite des appels à l'aide de setTimeout
à la place:
function foo() {
// do stuff
// ...
// and schedule a repeat
setTimeout(foo, delay);
}
// start the cycle
foo();
Cela garantit qu'il existe au moins un intervalle de delay
entre les appels. Il rend également plus facile pour annuler la boucle si nécessaire - il suffit de ne pas appeler à l' setTimeout
lors de votre boucle de résiliation condition est atteinte.
Mieux encore, vous pouvez envelopper ce tout en un immédiatement appelé expression de fonction qui crée la fonction qui appelle lui-même à nouveau comme ci-dessus, et commence automatiquement la boucle:
(function foo() {
...
setTimeout(foo, delay);
})();
qui définit la fonction et commence le cycle en entier.
Voici un wrapper pour la jolie-fy si vous en avez besoin:
(function() {
var originalSetInterval = window.setInterval;
window.setInterval = function(fn, delay, runImmediately) {
if(runImmediately) fn();
originalSetInterval(fn, delay);
};
})();
Définissez le troisième argument de la fonction setInterval pour de vrai et ça va fonctionner pour la première fois, immédiatement après setInterval:
setInterval(function() { console.log("hello world"); }, 5000, true);
Ou omettre le troisième argument et il conservera son origine comportement:
setInterval(function() { console.log("hello world"); }, 5000);
Certains navigateurs prennent en charge des arguments supplémentaires pour setInterval qui ce wrapper ne prend pas en compte; je pense que ce sont rarement utilisés, mais gardez cela à l'esprit si vous avez besoin d'eux.