2013-07-16 19 views
5

showRandom işlevi her 1000 milisaniyede bir yürütülür, ancak her random milisaniyede çalıştırılmasını istiyorum .. bunun için herhangi bir çözüm var mı? Teşekkür ederim!SetInterval, her seferinde rastgele milisaniye sayısıyla nasıl kullanılır?

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: Felix söyledi jsFiddle

+4

kullanın randomizing ile setTimeout kullanmaktır. https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout –

+0

Teşekkür ederim Felix – smotru

+1

@FelixKling: Cevabımı bir CW yaptım, çünkü gerçekten cevabınız, sadece koyuyorum OP bunu kabul edebilir. :-) (Umrumda değilsin biliyorum, aslında kimsenin umurunda değil eminim. Ama yanlış geldi. Ayrıca iki kişi de bir topluluk yapar.) –

cevap

4

: Eğer aralığını her zaman değiştirmek istiyorsanız, bunun yerine setTimeout kullanın. Basitleştirilmiş bir örnek sorun tam olarak orijinal kod ne yapmak istediğinizi aşağıdaki yaşıyorum olarak: Eğer yerine setTimeout kullanabilirsiniz rastgele bir aralık istiyorsanız

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

Teşekkür ederim! Daha sonra kullanmak için küresel olmak rasgele ihtiyacım var. – smotru

+0

@smotru: Yukarıdakiler global kullanılarak devam ediyor. (Random' 'önünde hiçbir' var' yoktur.) Girişiniz için –

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


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

. İşte bir örnek size (değil hataları içerebilir test) bir fikir vermek için:

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

}

setInterval sorun bunu setted bir kez aralık düzeltildiğini olduğunu. Aralığı durdurabilir ve yeni bir tane başlatabilirsiniz ancak setTimeout daha iyi bir çözüm olacaktır.

0

setTimeout kullanılarak setInterval(fn,PERIOD) uygulanmasıdır beri:

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

Yani, ne gerek yerine setInterval` `arasında setTimeout`` iteration*PERIOD

+0

teşekkürler, bu 3 yıl eski sonrası olduğu için ben bile bu eskiden ne olduğunu hatırlamıyorum. Fakat bu konuya geri döndüğümüzden, lütfen yineleme * PERIOD'un nasıl rasgele olacağını söyleyin? – smotru

İlgili konular