Appelle setTimeout avec un délai négatif ok?

J'ai un extrait de code que je veux durer au moins une seconde. Moi aussi:

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

Notez que SleepTime peut être négatif. Est-ce que je peux faire

 setTimeout(callback, sleepTime) 

Ou dois-je vérifier une valeur négative explicitement?

Selon la référence MDN , la spécification nécessite un délai d'attente minimum.

Si vous fournissez quelque chose de moins que cela (la spécification HTML5 indique 4ms), le navigateur ignorera simplement votre délai et utilisera le minimum.

Donc, les négatifs devraient être bien, car ce sera tout simplement inférieur au minimum.


Apparemment, ce n'est pas toujours le cas (ce n'est pas toujours le cas avec le développement web!). Selon ( http://programming.aiham.net/tag/browser-compatibility/ ):

Fournir setTimeout un temps négatif n'entraînera pas toujours la fonction de rappel appelée. Cela fonctionne dans d'autres navigateurs, mais dans Internet Explorer (8 ou inférieur), vous devez vous assurer que tous les temps négatifs sont changés à zéro.

Je n'ai pas testé cela moi-même, mais comme Thomasz l'a dit, il est préférable d'être en sécurité.

Mieux vaut prévenir que guérir:

 setTimeout(callback, Math.max(sleepTime, 0)) 
 if(sleepTime < 0) sleepTime = 0; setTimeout(callback, sleepTime) ; 

Vous pouvez faire comme aussi.

Vous pouvez vérifier comment cela fonctionne ici:

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

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é. N'est-il pas préférable de le résoudre directement dans setTimeout ?

 // Run this once. (function(){ var oldSetTimeout = setTimeout setTimout = function(callback, delay){ return oldSetTimeout(callback, Math.max(delay, 0)) } })() // Call setTimeout safely with a negative delay. setTimeout(function(){ console.log("Hello World") }, -42)