Funciones de llamada

Callbacks y asincronismo

Callbacks: funciones que son llamadas o invocadas al terminar la ejecuación de alguna otra función o tarea. Pero no interrumpen el proceso. Las encuentras en múltiples métodos de Javascript.

Se usan como parámetros de funciones que se ejecutan en segundo plano. En el ejemplo de arriba has visto una callback en el método setTimeout(): la función que muestra el alert se ejecuta cuando finaliza el conteo de tiempo de setTimeout(), que se ejecuta en segundo plano.

Otro caso habitual son los eventos. Las funciones que se asignan como manejadores de eventos son funciones callback, que se ejecutan cuando se produce un evento. La espera del evento es una tarea que se está ejecuntando en segundo plano (en el navegador).

Otro uso muy habitual es en Ajax, el proceso para hacer peticiones al servidor, que pueden recibir datos sin necesidad de actualizar la página:

function miCallBack(xmlhttp) {

    if (xmlhttp.readyState==4 && xmlhttp.status==200) {         console.log(xmlhttp.responseText);}

}

function start(callback, url) {

    var xmlhttp = new XMLHttpRequest();

    xmlhttp.open("POST", url, true);

    xmlhttp.onreadystatechange=function() {callback(xmlhttp); };

    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");

    xmlhttp.send("Nombre=Juan&Apellido=Pérez");

}

start(miCallBack, "/test.php");

En este ejemplo creamos una función callback (miCallBack) que se va a encargar de recibir y mostrar en consola la respuesta a la petición enviada a la página test.php. Cuando termine la petición se llama a la función callback definida xmlhttp.onreadystatechange.

Resumen

Las funciones callback se pueden ver también como aquellas que se pueden pasar como argumentos de otras funciones.

Se utlizan en muchos métodos del objeto array para procesar cada elemento del vector.

El uso más evidente de las callback en procesos asíncronos es su uso en temporizadores, como setTimeout o setInterval.

En los temporizadores las funciones callback se van a ejecutar en el futuro, cuando indique el temporizador. Pero el proceso principal no se detiene.

Otro escenario de uso de cllback para el asinconismo son los eventos, donde la función de ejecutará en un momento indeterminado, o no se ejecutará.