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:
-
/* richiama la funzione alert allo scadere dei 5000 ms */
-
var timeout = setTimeout( "alert('5 secondi!')",5000);
-
-
/* cancella l'evento associato alla variabile timeout*/
-
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:
-
//dichiaro variabile globale
-
var timeoutsQueue = new Array();
-
-
//aggiungo evento
-
timeoutQueue[n] = setTimeout("ritardaFunction("+parametro+")",250);
-
-
//interrompo un singolo evento
-
clearTimeout(timeoutQueue[n]);
-
-
//interrompo tutti gli eventi della coda
-
for(i=0;i<timeoutQueue.length;i++){
-
clearTimeout(timeoutQueue[i]);
-
}

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?
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.
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…
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 ;-)