61 votes

Est-ce que l'appel de setTimeout avec un délai négatif est correct ?

L'extrait suivant définit un délai d'attente que j'aimerais durer au moins une seconde :

 var currentTimeMillis = new Date().getTime();
// do stuff...
var sleepTime = 1000 - (new Date().getTime() - currentTimeMillis);

Étant donné que sleepTime peut être un nombre négatif, est-il sûr d'appeler setTimeout , comme ceci :

 setTimeout(callback, sleepTime)

Ou dois-je vérifier les valeurs négatives avant d'appeler setTimeout ?

64voto

Tomasz Nurkiewicz Points 140462

Mieux vaut prévenir que guérir:

 setTimeout(callback, Math.max(sleepTime, 0))

2voto

dku.rajkumar Points 8886

Vous pouvez également utiliser une instruction conditionnelle, comme ceci :

 if (sleepTime < 0) {
  sleepTime = 0;
}
setTimeout(callback, sleepTime);

0voto

Alexander Yezutov Points 1947

Vous pouvez vérifier comment cela fonctionne ici :

http://jsfiddle.net/ayezutov/2eZLe/8/

0voto

Peppe L-G Points 1945

Hmm... Les solutions mentionnées résolvent le problème lors de l'appel à setTimeout , il doit donc être écrit à chaque fois qu'un appel est effectué. Ne vaut-il pas mieux le résoudre directement en setTimeout ?

 // Run this once.
(function(){
    var oldSetTimeout = setTimeout
    setTimeout = function(callback, delay){
        return oldSetTimeout(callback, Math.max(delay, 0))
    }
})()

// Call setTimeout safely with a negative delay.
setTimeout(function(){ console.log("Hello World") }, -42)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X