Defferdオブジェクトを2重のforループの中で使ってうまく待合せられない
あれが、終わったら、これらをする。 あれが、終わったら、これらをする。 あれが、終わったら、これらをする。 あれら、これらがすべて終わったら それ(alert)をやる。 がやりたい。
var ajaxs = []; for (var i=0;i<length_i;i++){ var ajax1 = $.ajax(url, params).done(function (data){ for (var j=0;j<length_j;j++){ var ajax2 = $.ajax(url, params); push(ajaxes,ajax2); } $.when.apply(undefined, ajaxes).done(function (){ alert("hoge"); }); } }
上記例だと、iのループがすべておわっていないに、alert文が実行されてしまう。 だからといって、下記の例だと、jのループが終わっていないのに、alert文が 実行されてしまう。さて、どうすればいいのだろうか?
var ajaxs = []; for (var i=0;i<length_i;i++){ var ajax1 = $.ajax(url, params).done(function (data){ for (var j=0;j<length_j;j++){ var ajax2 = $.ajax(url, params); } } push(ajaxes,ajax1); } $.when.apply(undefined, ajaxes).done(function (){ alert("hoge"); });
とりあえず、搾り出したコードは、こんな感じ。まったく美しくないコードですが・・・
var ajaxs = []; var count = 0; for (var i=0;i<length_i;i++){ var ajax1 = $.ajax(url, params).done(function (data){ for (var j=0;j<length_j;j++){ var ajax2 = $.ajax(url, params); push(ajaxes,ajax2); } $.when.apply(undefined, ajaxes).done(function (){ count = count + 1; if (count >= length_i){ alert("hoge"); } }); } }