2013-07-16 7 views
5

La funzione showRandom viene eseguita ogni 1000 millisecondi ma voglio che venga eseguita ogni random millisecondi .. esiste una soluzione per questo? Grazie!Come utilizzare setInterval con un numero casuale di millisecondi ogni volta?

var random = 1000; 
setInterval(function() {random = randomizator(60000,200000);} ,1000); 
setInterval(function() {showRandom(random);}, random); 
function randomizator(a,b) 
{ 
    return Math.floor(Math.random()*b) + a; 
} 
function showRandom(random) 
{ 
    $('#test').text(random); 
} 

DEMO: jsFiddle

+4

Usa 'setTimeout' invece di' setInterval'. https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout –

+0

grazie Felix – smotru

+1

@FelixKling: ho reso la mia risposta in CW, poiché è davvero la tua risposta, l'ho appena messa dove l'OP può accettarlo. :-) (So che non ti interessa, in effetti sono sicuro che a nessuno importa se non a me, ma è stato sbagliato. E inoltre, due fanno una comunità. :-)) –

risposta

4

Felix ha detto: Se si desidera modificare l'intervallo di ogni volta, utilizzare setTimeout invece. esempio semplificato come io sto avendo difficoltà a seguire esattamente ciò che si desidera che il codice originale da fare:

doTheRandom(); 
function doTheRandom() { 
    random = randomizator(60000,200000); 
    // Up to 1 second 
    setTimeout(doTheRandom, randomizator(1000, 2000)); // 1-2 seconds 
} 
+0

Grazie! Ho bisogno che il random sia globale da usare in seguito. – smotru

+0

@smotru: Quanto sopra continua a utilizzare il globale. (Non c'è 'var' davanti a' random'.) –

1
setInterval(function() { 
//your code to be executed every random miliseconds 
} ,random_interval()); 


var random_interval=function(){ 
return Math.random()*1000; 
} 
0

Se si desidera un intervallo casuale si potrebbe usare setTimeout invece. Ecco un esempio per dare un'idea (non testato potrebbe contenere degli errori):

function setRandomInterval(){ 
//Add your code here 
setTimeout(function(){ 
    setRandomInterval(); 
}, Math.random()*1000); 

}

Il problema con setInterval è, che una volta che hai setted che l'intervallo è fisso. È possibile interrompere l'intervallo e avviarne uno nuovo, ma setTimeout sarà la soluzione migliore.

0

Dal momento che l'attuazione di setInterval(fn,PERIOD) usando setTimeout è:

 setTimeout(fn,iteration*PERIOD) // iteration ∈ [1,2,3...,n] 

Quindi, ciò che è necessario è quello di utilizzare setTimeout, con randomizzazione iteration*PERIOD

+0

Grazie per il tuo contributo, dato che questo è un vecchio post di 3 anni, non ricordo nemmeno per cosa ho usato questo. Ma dal momento che siamo tornati su questo argomento, ti prego, dimmi come il PERIODO di iterazione sarebbe casuale? – smotru