2013-07-16 15 views
5

Funkcja showRandom jest wykonywana co 1000 milisekund, ale chcę, aby była wykonywana co random milisekund. Czy jest na to jakieś rozwiązanie? Dziękuję Ci!Jak używać setInterval z losową liczbą milisekund za każdym razem?

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

Użyj 'setTimeout' zamiast' setInterval'. https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout –

+0

dziękuję Felix – smotru

+1

@FelixKling: Utworzyłem swoją odpowiedź jako CW, ponieważ to jest naprawdę Twoja odpowiedź, po prostu ją stawiam gdzie PO może to zaakceptować. :-) (Wiem, że ci to nie przeszkadza, w rzeczywistości jestem pewien, że nikt mnie nie obchodzi, ale ja się myliłem, a poza tym dwoje tworzy społeczność. :-)) –

Odpowiedz

4

Felix to powiedział: Jeśli chcesz zmienić interwał za każdym razem, zamiast używać setTimeout. Uproszczony przykład jak mam problemy z następującą dokładnie, co chcesz zrobić oryginalny kod:

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

Dziękuję! Potrzebuję losowego, by być globalnym, by móc go później użyć. – smotru

+0

@smotru: Powyższe kontynuuje używanie globalnego. (Nie ma 'var' przed' random'.) –

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


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

Jeśli chcesz losowy przedział można użyć zamiast setTimeout. Herezje przykład dać wyobrażenie (nie testowana może zawierać błędy):

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

}

Problem z setInterval jest to, że kiedy już go setted interwał jest stała. Możesz zatrzymać interwał i rozpocząć nowy, ale setTimeout będzie lepszym rozwiązaniem.

0

Ponieważ realizacja setInterval(fn,PERIOD) wykorzystaniem setTimeout jest:

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

Więc, co potrzebne jest do korzystania setTimeout z randomizing iteration*PERIOD

+0

Dziękuję za twoje zgłoszenie, ponieważ jest to stary post z ostatnich lat, nie pamiętam nawet, do czego go użyłem. Ale od kiedy wracamy do tego tematu, proszę mi powiedzieć, w jaki sposób iteracja * PERIOD będzie losowa? – smotru

Powiązane problemy