Представьте себе, что мы должны запрашивать у 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)
Что мне здесь не нравится, так это то, что в этом случае я не могу справиться с ошибкой ответа (например, я не могу установить время ожидания ответа) и общим подходом (я полагаю, должен быть способ использовать больше сила функционального программирования здесь)
Есть идеи?
Привет!
UPD: Спасибо за решение с цепочкой обратных вызовов. Я нашел хороший подход здесь :. вот что было предложено в комментариях:
(function hidenext(jq){
jq.eq(0).fadeOut("fast", function(){
(jq=jq.slice(1)).length && hidenext(jq);
});
})($('div#bodyContent a'))
С небольшой настройкой он может дождаться последнего обратного вызова.
Теперь я хочу правильно обрабатывать долго выполняющиеся запросы. Есть какие-нибудь подсказки?