Как использовать setInterval со случайным числом миллисекунд каждый раз?


Функция showRandom выполняется каждые 1000 миллисекунд, но я хочу, чтобы она выполнялась каждые random миллисекунды.. есть ли какое-то решение для этого ? Спасибо!

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);
}

Демо: jsFiddle

4 5

4 ответа:

Феликс сказал: Если вы хотите каждый раз менять интервал, используйте setTimeout вместо этого. Упрощенный пример, поскольку мне трудно точно следовать тому, что вы хотите, чтобы ваш исходный код делал:

doTheRandom();
function doTheRandom() {
    random = randomizator(60000,200000);
    // Up to 1 second
    setTimeout(doTheRandom, randomizator(1000, 2000)); // 1-2 seconds
}
    setInterval(function() {
//your code to be executed every random miliseconds
} ,random_interval());


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

Если вы хотите случайный интервал, вы можете использовать setTimeout вместо этого. Вот пример, чтобы дать вам идею (не проверено может содержать ошибки):

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

}

Проблема с setInterval заключается в том, что после его установки интервал фиксируется. Вы можете остановить интервал и начать новый, но setTimeout будет лучшим решением.

Так как реализация setInterval(fn,PERIOD) с помощью setTimeout является:

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

Итак, вам нужно использовать setTimeout, с рандомизацией iteration*PERIOD