8
votes

Exécuter Settimeout tôt

J'utilise de débober pour exécuter des événements après un délai d'attente en utilisant Settimeout. Le problème que j'ai, c'est que d'autres événements JavaScript s'attendent à ce que ces événements se produisent de manière synchrone. Comme ils exécutent maintenant après un délai d'attente, j'aimerais pouvoir les déclencher prématurément par d'autres événements JavaScript (afin que ces événements ne les nécessitent pas échoueront).

anyhand, si je fais quelque chose comme: P >

timeout = setTimeout(function() { alert('hi'); }, 10000);


1 commentaires

"D'autres événements JavaScript s'attendent à ce que ces événements se produisent de manière synchrone" ... cela ressemble à un design problématique


5 Réponses :


0
votes

Utilisez Cleartimeout et reporter pour une heure antérieure.


0 commentaires

7
votes

Donc, si vous faites ce que vous retardez sa propre fonction:

if (timeout)
    clearTimeout(timeout);


3 commentaires

Excusez-moi de ne pas avoir été clair. J'étais curieux si c'était possible avec juste la valeur de retour de Settimeout.


@Goldenneweby: la valeur de retour de SetTimeOut () est juste un identifiant afin que vous puissiez le suivre (et l'annuler). Pas beaucoup de but pour cela autrement.


@Cory +1 Mais je devrais être en désaccord avec pas beaucoup de but pour cela sinon . Si vous avez une pièce d'identité enregistrée, il serait logique que vous puissiez avoir un triggerimeout , gettimeout ou même updateTimeTout méthodes avec ensemble et effacer - Malheureusement, ils n'existent pas cependant, mais ils pourraient être écrits comme une polyfill incluent avec des remplacements sur mesure pour Settimeout et Cleartimeout .



1
votes

Il suffit de mettre la fonction et de lui donner un nom: xxx

alors vous pouvez l'appeler dans d'autres endroits avec gestionnaire (); < / p>


0 commentaires

6
votes

Vous ne pouvez pas le suivre avec la standard settimeout , mais JavaScript vous permet d'améliorer les fonctionnalités que vous le souhaitez.

Par exemple, vous pouvez avoir votre propre Settimeout : xxx

Vous pouvez le voir en action à jsfiddle < / P>

Notez que ce simple hack ne prend pas en compte le nettoyage des identifiants utilisés lorsque les délais d'attente se produisent, mais il est juste de montrer que vous pouvez faire ce genre de chose en JavaScript si vous en avez vraiment besoin. < / p>


1 commentaires

Le réel SetTimeout prend plus de deux paramètres, tous les paramètres après le passage du paramètre milliseconds sont transmis au rappel. Exemple: SetTimeOut (alerte, 2000, 'Ceci est transmis à alerte deux secondes plus tard');



4
votes

Solution Polyfill

Voici quelques JavaScript que j'ai mis à jour à partir d'un projet précédent, il est prolongé maintenant avec des méthodes de déclenchement et de mise à jour; Il est similaire à la solution de Jan Wikholm (+1) - mais un peu plus complet, en tenant compte des efforts, de la transmission d'arguments et de la prévention de eval code> si nécessaire: p>

setTimeout( function(a){ alert(a) }, 2000, 'Hello World' );


1 commentaires

Brillant, c'est exactement ce que je cherchais des informations sur, grand que je n'ai pas besoin de passer en l'écrivant moi-même. Merci: D