Roko C. Buljan Roko C. Buljan - 1 month ago 21
Javascript Question

Randomize setInterval ( How to rewrite same random after random interval)

I'd like to know how to achieve:
generate a random number after a random number of time. And reuse it.

function doSomething(){
// ... do something.....
}

var rand = 300; // initial rand time

i = setinterval(function(){

doSomething();
rand = Math.round(Math.random()*(3000-500))+500; // generate new time (between 3sec and 500"s)

}, rand);


And do it repeatedly.

So far I was able to generate a random interval, but it last the same until the page was refreshed (generating than a different time- interval).

Thanks

Answer

Here is a really clean and clear way to do it:

http://jsfiddle.net/Akkuma/9GyyA/

function doSomething() {}

(function loop() {
    var rand = Math.round(Math.random() * (3000 - 500)) + 500;
    setTimeout(function() {
            doSomething();
            loop();  
    }, rand);
}());

EDIT:

Explanation: loop only exists within the immediately invoked function context, so it can recursively call itself.