jQuery.Deferrdオブジェクトを使用して複数のajaxコールバックを同期しようとしています。明らかに、jQuery.whenはこれを処理しますが、私のコードは、ajaxリクエストが同じメソッドで呼び出されないように設計されています。たとえば、これはフローです。
//ボタンがクリックされます
//モジュール1はhtmlのスニペットを要求し、DOMを更新します
//モジュール2はHTMLの別のスニペットを要求し、DOMを更新します
DOMを同時に更新するには、両方のモジュールが必要です。つまり、両方のリクエストが返された後にコールバックが実行されるようにする必要があります。
モジュール1とモジュール2は、お互いがなくても存在できる必要があり、お互いの知識がないため、$。when(doMod1Request()、doMod2Request())。then(function()を使用してリクエストを一緒に行うことはできません。 {...})そしてコールバックも独立している必要があります。
したがって、私はajaxのラッパーを作成しました。これは、遅延オブジェクトにコールバックを追加し、$と同様の方法で、ajaxリクエストが遅延オブジェクトのコールバックの数と同じ回数を返したときに遅延オブジェクトを解決します。 。
ただし、私のジレンマはdeferred.resolve()は、1セットの引数でのみ呼び出すことができるため、各コールバックは同じ値を取得します。
例えば
var deferred = new $.Deferred();
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.resolve('<div class="html-snippet-1"></div>');
私はこのようなものが欲しいのに対し:
var deferred = new $.Deferred();
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-2"></div>
});
deferred.resolve(['<div class="html-snippet-1"></div>', '<div class="html-snippet-2"></div>']);
これは可能ですか、それとも私はこれを間違って行っていますか?