Imagine que tenemos que las fuentes que debe solicitar ajax. Quiero realizar algunas acciones cuando se activan todas las devoluciones de llamadas. ¿Cómo se puede hacer esto, además de este enfoque:La mejor solución para esperar a que se ejecuten todas las devoluciones de llamada ajax
(function($){
var sources = ['http://source1.com', 'http://source2.com'],
guard = 0,
someHandler = function() {
if (guard != sources.length) { return; }
//do some actions
};
for (var idx in sources) {
$.getJSON(sources[idx], function(){ guard++; someHandler(); })
}
})(jQuery)
Lo que no me gusta es que en este caso no puedo manejar la respuesta no (por ejemplo, no puedo establecer el tiempo de espera para la respuesta a venir.) Y enfoque general (supongo que debería haber una forma de usar más poder de programación funcional aquí)
¿Alguna idea?
¡Recuerdos!
UPD: Gracias por la solución con el encadenamiento de devoluciones de llamada. Encontré un buen enfoque here:. esto es lo que se propone en los comentarios:
(function hidenext(jq){
jq.eq(0).fadeOut("fast", function(){
(jq=jq.slice(1)).length && hidenext(jq);
});
})($('div#bodyContent a'))
Con un poco de ajustar se puede esperar a la última devolución de llamada.
Ahora quiero gestionar solicitudes de larga ejecución correctamente. ¿Alguna pista?
Esto se ha preguntado antes, pero en lugar de XHR, era una serie de eventos DOM. Tampoco puedo recordar el nombre de la pregunta. –