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
setInterval() The setInterval() method, offered on the Window and Worker interfaces, repeatedly calls a function or executes a code snippet, with a fixed time delay between each call.
The Math. random() method returns a random number from 0 (inclusive) up to but not including 1 (exclusive).
setInterval will run the function sendMessage every second (1000 ms).
Generating Javascript Random Numbers Javascript creates pseudo-random numbers with the function Math. random() . This function takes no parameters and creates a random decimal number between 0 and 1. The returned value may be 0, but it will never be 1.
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.
Here's a reusable version that can be cleared. Open-sourced as an NPM package with IntelliSense enabled.
Utility Function
const setRandomInterval = (intervalFunction, minDelay, maxDelay) => { let timeout; const runInterval = () => { const timeoutFunction = () => { intervalFunction(); runInterval(); }; const delay = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay; timeout = setTimeout(timeoutFunction, delay); }; runInterval(); return { clear() { clearTimeout(timeout) }, }; };
Usage
const interval = setRandomInterval(() => console.log('Hello World!'), 1000, 5000); // // Clear when needed. // interval.clear();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With