Maison >interface Web >js tutoriel >Comment puis-je contrôler l'exécution du délai d'attente et déterminer le temps restant en JavaScript ?
Lorsque vous travaillez avec JavaScript, il peut être nécessaire de contrôler le flux des opérations asynchrones telles que les délais d'attente. Ici, nous explorons les moyens de suspendre et de reprendre les délais d'attente actifs, ainsi que de récupérer le temps restant sur le délai d'attente actuel.
Pour suspendre un délai d'attente, vous pouvez utiliser un wrapper fonction qui intercepte l’appel window.setTimeout et fournit les fonctionnalités nécessaires. La fonction wrapper, Timer, prend une fonction de rappel et un délai comme arguments et gère la pause, la reprise et le suivi du temps restant.
<code class="javascript">var Timer = function(callback, delay) { var timerId, start, remaining = delay; this.pause = function() { window.clearTimeout(timerId); timerId = null; remaining -= Date.now() - start; }; this.resume = function() { if (timerId) { return; } start = Date.now(); timerId = window.setTimeout(callback, remaining); }; this.resume(); };</code>
Pour utiliser ce wrapper, instanciez un objet Timer et appelez son méthodes pause() et curriculum vitae() selon les besoins.
Pour obtenir le temps restant sur le délai d'attente actuel, une solution consiste à stocker l'heure de début lorsque le délai d'attente est défini et calculez la différence entre l'heure actuelle et l'heure de début lors de la pause.
<code class="javascript">var start = Date.now(); var t = setTimeout("dosomething()", 5000); var remaining = (start + 5000) - Date.now();</code>
Cependant, il est important de noter que si le délai d'attente a été mis en pause et repris, ce calcul peut ne pas être précis. Dans la fonction Timer wrapper fournie précédemment, le temps restant est suivi et mis à jour en conséquence, offrant une méthode plus fiable pour récupérer le temps restant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!