複数のソースからデータを取得するアプリケーションがあり、すべてのデータが取得された場合にのみ続行します。データをできるだけ速くしたいので、並列リクエストを使用します。
すべてのリクエストがいつ完了したかを把握するために、次のようにしています。
function getData(cb) {
var count, data;
count = 0;
data = {};
function getDataDone() {
count++;
//only call callback when all async requests are done
if (count === 3 && cb) {
cb(data);
}
}
foo.doAsync({
success: function (d) {
data.foo = d;
getDataDone();
}
});
bar.doAsync({
success: function (d) {
data.bar = d;
getDataDone();
}
});
$.getJSON("/api/", function (d) {
data.user = d;
getDataDone();
});
} //end getData
getData(function (data) {
//application data loaded, do stuff
data.foo;
data.bar;
data.user;
});
foo.doAsync
、リクエストは並行して発生し、完了すると、カウンターをインクリメントする を呼び出しbar.doAsync
ます。カウンターが予想される要求数と等しい場合は、コールバックを実行します。$.getJSON
getDataDone()
この場合、jQuery.deferred はどのように適用されるのでしょうか? そのままコーディングしても問題なく動作します。私が持っているものよりも遅延を使用する利点はありますか?