Вот что я сделал с jQuery Отложено .
Мне нужно было загрузить данные для нескольких различных диаграмм, и как только все данные отдельных диаграмм были загружены, я хотел объединить данные и диаграмму , что .
Utils = {
createCharts: function (){
Utils.initializeCharts();
Utils.createUserCharts();
},
initializeCharts: function (){
Utils.deferred = $.Deferred().done(function (){
Utils.createAggregateCharts();
});
Utils.remainingCharts = $(".user").size();
},
decrementRemainingCharts: function (){
--Utils.remainingCharts;
if (Utils.remainingCharts == 0){
Utils.deferred.resolve();
}
},
createUserCharts: function (){
$(".user").each(function (i, user){
// ...
$.get(href, function (response){
Utils.chart(chart_id, response);
Utils.decrementRemainingCharts();
});
});
},
chart: function (){
// ...
},
createAggregateCharts: function (){
// ...
}
};
По сути, вы создаете объект Deferred
с функцией, которая вызывается, когда она "разрешена". Затем, основываясь на каком-то внешнем условии, вы решаете, когда позвонить Deferred.resolve
. Это очень элегантно.