私が最近使用したソリューションは、悪くはありませんでした。forループを経て、正しいデータでajax呼び出しを実行する関数でwindow.setTimeoutを実行するメソッドを呼び出しました。max 変数と counter 変数を使用して、すべての ajax 呼び出しが正しく実行されたかどうかを確認しました (成功関数の最後でカウンターをインクリメントします)。別の setTimeout によって呼び出された関数が、カウンターが max に等しいかどうかをチェックしました。そうでない場合は、新しい setTimeout でメソッドを再度呼び出します。そうでない場合は、最後に実行する必要がある関数を呼び出します。
コードでは:
var count = 0, max = 0;
function batchCall() {
var a = [{
method: "DoThis",
params: { param1: 1, param2: 2 }
}, {
method: "DoThat",
params: { param1: 3 }
}]
max = a.length;
for (var i = 0; i < max; i++) {
callAjax(a[i]);
}
window.setTimeout(checkAllFinished, 100);
}
function callAjax(o) {
window.setTimeout(function() {
// do ajax call here
}, 0);
}
function checkAllFinished() {
if (count == max) {
// do what you need to do when all are called
}
else {
window.setTimeout(checkAllFinished, 100);
}
}