コード例: http://jsfiddle.net/MhEPw/1/
2 つの jQuery Deferred オブジェクトがあります。
複数の「非同期」リクエストを発生させたい - そしてそれらがすべて実行された後、指定された順序でコールバック (.done 関数) を実行する必要があります。残念ながら、それらは順番に実行されません。
Deferred が提供しない機能をここで探しているのではないでしょうか?
コード例: http://jsfiddle.net/MhEPw/1/
2 つの jQuery Deferred オブジェクトがあります。
複数の「非同期」リクエストを発生させたい - そしてそれらがすべて実行された後、指定された順序でコールバック (.done 関数) を実行する必要があります。残念ながら、それらは順番に実行されません。
Deferred が提供しない機能をここで探しているのではないでしょうか?
必要なことは、すべてのリクエストを 1 つのマスター遅延オブジェクトにリンクし、すべてのコールバックをその promise に登録することです。マスター遅延オブジェクトは、個々のリクエストをリッスンし、それに応じて解決する必要があります。これを実現する最も簡単な方法は、鶏が先か卵が先かという問題を回避するために、すべての遅延オブジェクトを前もって定義することです。
var d1 = $.Deferred();
var d2 = $.Deferred();
var def = $.when(d1, d2);
def.done(function() {
alert(1);
});
setTimeout(function() {
d1.resolve();
}, 3000);
def.done(function() {
alert(2);
});
setTimeout(function() {
d2.resolve();
}, 1000);
フィドル: http://jsfiddle.net/pVVad/
遅延オブジェクト定義の順序を変更することは可能ですが、例がより複雑になります。
Adam、「setTimeout」を「for」で変更すると、それが順番に実行されることがわかります。setTimeout は「別のアクション」を呼び出す「トリガー」を追加します。この「別のアクション」は、指定した時間内に実行されます。 、しかし setTimeout 呼び出しは順番に実行されます。
setTimeout を使用しない場合、スクリプトは順番に実行されます。