Mar 232015
 
Artículo Javascript

En muchos lenguajes de programación existe una función sleep() que permite suspender la ejecución del programa durante un cierto tiempo, sin consumir CPU. Habitualmente, esta función se utiliza en un bucle, a la espera de que cierto recurso necesario para continuar la ejecución esté disponible.

En javascript no existe la función sleep(), pero se puede utilizar setTimeout para programar la ejecución de una función al cabo de un cierto tiempo.

Por ejemplo, podemos utilizar utilizar setTimeout dentro de un bucle para llamar recursivamente a una función de la siguiente forma:

function mi_funcion() {

    // Está disponible el recurso necesario ?
    if (! recurso_disponible) {
        // Si no está disponible, vuelve a intentarlo dentro de 100ms
        setTimeout(mi_funcion,100);
        // y abandona de momento
        return;
    }
    // En este punto, el recurso está disponible
    // Ejecuta el código que depende de la disponibilidad del recurso
    ...
}

Como se puede ver en el ejemplo, el primer argumento en la llamada a setTimeout es una referencia a la función a ejecutar.

Pero si la función espera recibir argumentos, debemos modificar la llamada a setTimeout, pasándole una función anónima que simplemente llama a la función que queremos ejecutar, con sus argumentos.

Ejemplo:

function otra_funcion(datos) {

    // Está disponible el recurso ?
    if (! recurso_disponible) {
        // Si no está disponible, vuelve a intentarlo dentro de 100ms
        setTimeout(function() {
                otra_funcion(datos);
            },100);
        // y abandona de momento
        return;
    }
    // En este punto, el recurso está disponible
    // Ejecuta el código que depende de la disponibilidad del recurso
    ...
}

Y eso es todo!

 Publicado por en 12:19 pm

 Deja un comentario

(requerido)

(requerido)