Me gustaría saber cómo lograr:
generar un número aleatorio después de un número aleatorio de tiempo. Y reutilizarlo.

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

Y hacerlo repetidamente.

Hasta ahora era capaz de generar un intervalo aleatorio, pero es la misma hasta que la página se actualiza (la generación de una diferente de intervalo de tiempo).

Gracias

4 Comentarios

  1. 86

    Aquí es un muy limpio y claro la manera de hacerlo:

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

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

    EDICIÓN:

    Explicación:
    bucle sólo existe dentro de la invoca inmediatamente función del contexto, por lo que se puede llamar recursivamente a sí mismo.

    • Solución agradable, pero es necesario algún cambio, si usted quiere ser capaz de eliminar el «intervalo» en un tiempo.
    • si desea detener la reproducción en bucle, simplemente en lugar de una declaración de si todo el setTimeout con la lógica que usted necesita.
    • Lo siento desenterrar esta respuesta, muchos años después, pero tengo una pregunta : no tienes una pila de contexto de ejecución que mantener el aumento sin fin con esta solución ?
    • He encontrado una buena explicación sobre el por qué no crear una pila de contexto de ejecución : stackoverflow.com/a/13506904/1951430
    • Aquí es un simple MECANISMO nacional de prevención paquete tiré juntos para hacer de este un proceso sencillo: npmjs.com/package/set-random-interval
    • hace pila de contextos de ejecución. Estás en lo correcto.

  2. 5

    Algo como esto debería funcionar uso setTimeout() lugar, de modo que usted puede establecer un nuevo valor aleatorio cada vez que:

    function doSomething() {
        alert("doing something");
    }
    
    function init() {
        var myFunction = function() {
            doSomething();
            var rand = Math.round(Math.random() * (3000 - 500)) + 500; //generate new time (between 3sec and 500"s)
            setTimeout(myFunction, rand);
        }
        myFunction();
    }
    
    $(function() {
        init();
    });

    Trabajo jsFiddle aquí.

    • Sí – de esa manera usted puede actualizar el intervalo aleatorio cada vez que
    • Eso es jQuery al final, no llanura de Javascript.
    • ¿Cómo se puede pasar argumentos con este método?
  3. 4

    Sólo la configuración de intervalo cada vez que rand clara (y primero)

    function doSomething(){
         //... do something.....
    }
    
    var i;
    var rand = 300;
    
    function randomize() {
        doSomething();
        rand = Math.round(Math.random()*(3000-500))+500; 
        clearInterval(i);
        i = setInterval('randomize();', rand);
    }
    
    i = setInterval('randomize();', rand);

    o trate de usar setTimeout (y ajuste de nuevo después de randing)

    • En una nota lateral debe ser setInterval(randomize, rand);
  4. 1

    Acaba de lanzar mi sombrero en el anillo

        var keepLooping = true;
        (function ontimeout(){
            if(keepLooping){
                doTheAction();
                setTimeout(ontimeout, Math.random() * 100);
            }
        })();

    depende de si quieres poner doTheAction() dentro de la setTimeout de devolución de llamada o no. Creo que es bueno ponerlo antes de/fuera. Si desea que el retraso inicial, a continuación, poner en el interior, si no, poner fuera de la simplicidad.

Dejar respuesta

Please enter your comment!
Please enter your name here