laboratorio caffeina

in few words, just developing

 

Come gestire timeout multipli

Spesso lavorando in Javascript ci si ritrova a lavorare con i timeouts. Generare eventi temporizzati in Javascript è abbastanza banale, si ricorre all'uso di due funzioni:

  • setTimeout() - che esegue una porzione di codice dopo lo scadere di x millisecondi
  • clearTimeout() - cancella il setTimeout()

Notare la sintassi dei comandi:

JavaScript:
  1. /* richiama la funzione alert allo scadere dei 5000 ms */
  2. var timeout = setTimeout( "alert('5 secondi!')",5000);
  3.  
  4. /* cancella l'evento associato alla variabile timeout*/
  5. clearTimeout(timeout);

Ma se si devono gestire più eventi temporizzati contemporaneamente? Una possibile soluzione è creare una variabile globale in cui gestire la coda di timeout, e una funzione che ripulisca la coda.

JavaScript:
  1. //dichiaro variabile globale
  2. var timeoutsQueue = new Array();
  3.  
  4. //aggiungo evento
  5. timeoutQueue[n] = setTimeout("ritardaFunction("+parametro+")",250);
  6.  
  7. //interrompo un singolo evento
  8. clearTimeout(timeoutQueue[n]);
  9.  
  10. //interrompo tutti gli eventi della coda
  11. for(i=0;i<timeoutQueue.length;i++){
  12.         clearTimeout(timeoutQueue[i]);
  13. }

Programmazione, Vita da Developer davide 23 October 2007 21:08 4 Commenti Popularity: 70% Free icon set

 
 
commenti
 
cedmax:

spè, non ho capito una cosa:
praticamente vai a creare un arrai di setTimeout che partono ogni 250 con dentro la stessa funzione, gusto?

ma un setInterval no?

 
 
davide:

In effetti leggendo in un unico blocco di codice la cosa e’ fuorviante. Io intendo che la riga 5 in maniera generica. Ovvero ho diversi eventi e quindi funzioni. E ovviamente non so’ a priori quante chiamate di queste avro’.

Spero di aver chiarito.

 
 
XwB:

Io ho provato a scrivere la prima parte che sembrava molto semplice ma non so per quale motivo non mi scrive l’alert dopo 5 secondi…

 
 
cedmax:

bè, se hai scritto tutta la prima parte l’alert non parte perchè subito dopo fai un clearTimeout che di fatto annulla l’impostazione precedente. se vuoi vederlo commenta il clear ;-)

 

Commenta



 
Chiudi
E-mail It