jQueryでイベントの処理結果を待つようなループを書きたい
以下のような配列があり、これをループで処理します。
var requestTable = ["owner","users","lines","info"];
$.each(requestTable, function(i, val){
// ループ処理
});
その際に、requestTable
のループではそれぞれサーバーからGET
でデータを取得します。
// ループ処理の中身
$.get("./url...?type="+val, {}, function(data){
// ここの処理完了を待って次のループに移りたい
});
ループ1回ごとに、$.get()
を呼び出したいのですが、callback処理の完了を待ってから次ループに移りたいのです。というのも、$.get()
の結果を必要としているためです。
これを綺麗なコードで書きたいのですが、どうしたら良いでしょうか?
追記です。
$.Deferred
を使う必要があるという事は分かります。
var df = $.Deferred();
//処理
df.resolve();
df.done(function(){
//処理が終了した時に行う事
});
df.done()の中で行うべきところを、次のループ、次のループという具合に繰り返したいという事です。
メソッドチェインにしても良いのかもしれませんが、はじめの配列にある文字列を繰り返し処理したいだけなので、同一処理を繰り返して書きたくありません。
web系の日が浅いため、頭がこんがらがってうまくコード化できません。
申し訳ありませんが、御教示ください。
再追記です
実行順序を守り、ループごとの実行の終了を待たなければならないのには理由があります。
質問の趣旨に直接関係ないと思い、説明を省いていたのですがループn 回目の結果を使ってループn+1 回目の$.get()
(実際には$.ajax()
)のURLパラメータとしたかったのです。
web APIをajaxでたたき、取得したGETデータをもとに次のループでURLを作成して再びweb APIを実行するという再帰処理が必要となっています。
説明不足となってしまって申し訳ありません。