2011-03-05 6 views
6

Tengo una función de devolución de llamada que me gustaría ejecutar después de que se hayan cargado dos llamadas $.getScript por separado.Patrón de diseño de devolución de llamada doble o múltiple con JavaScript/jQuery

estoy usando el diseño de abajo, pero se siente desordenado, y el uso de una función llamada siente muy poco jQuery

var foo_ready = false; 
var bar_ready = false; 
var dual_callback = function(){ 
    if(foo_ready && bar_ready) 
    { 
     //do things 
    } 
}; 

jQuery.getScript('/foo.js', function(){ 
     foo_ready = true; 
     dual_callback(); 
    }); 
jQuery.getScript('/bar.js', function(){ 
     bar_ready = true; 
     dual_callback(); 
    }); 

¿Hay una manera mejor o más elegante de hacer ejecutar una única devolución de llamada después de que se hayan completado múltiples llamadas asíncronas?

+0

Sólo se piensa que no es desordenado. Vi este código y de inmediato lo entendí, hombre comparado con algunas de las porquerías. Los carteles de SO se metieron en su pregunta, esto es elegante y elegante. Yo diría "no lo arreglaré, trabajando según lo previsto". – jpsimons

Respuesta

12

Si tiene jQuery 1.5.1 se puede hacer esto:

$.when($.getScript('/foo.js'), $.getScript('/bar.js')).done(function(){ 
    // this is called when both are done. 
}); 

Mira la Deferred Object y $.when()

+0

Muy bueno. +1. Aún no había leído sobre '$ .when()'; para mis propósitos particulares, no tengo acceso a 1.5.1; Estoy atrapado en el bache de 1.4.2, por ahora;) – Yahel

Cuestiones relacionadas