遅延オブジェクトのコールバックの前に実行する各 ajax リクエストで、done/fail/always コールバックを取得できません。
私が抱えている問題は、私の ajax リクエストの一部が失敗する可能性があることですが、失敗するかどうかにかかわらず、同じコードを実行する必要があります。
正確に説明するのは難しいので、私が抱えている問題を示すためにこのフィドルを作成しました。 http://jsfiddle.net/zZsxV/
var a1 = $.Deferred();
var a2 = $.Deferred();
var a3 = $.Deferred();
a1.done(function() {
$('body').append('a1 done<br />');
}).fail(function() {
$('body').append('a1 fail<br />');
}).always(function() {
$('body').append('a1 always<br />');
});
a2.done(function() {
$('body').append('a2 done<br />');
}).fail(function() {
$('body').append('a2 fail<br />');
}).always(function() {
$('body').append('a2 always<br />');
});
a3.done(function() {
$('body').append('a3 done<br />');
}).fail(function() {
$('body').append('a3 fail<br />');
}).always(function() {
$('body').append('a3 always<br />');
});
var def = $.when(a1, a2, a3);
def.always(function() {
$('body').append('defer always <-- should be after all<br />');
});
setTimeout(function() {
a1.resolve();
}, 5000);
setTimeout(function() {
a2.reject();
}, 1000);
setTimeout(function() {
a3.resolve();
}, 3000);
このトピックに関する多くの回答を読みましたが、私のニーズに正確に適合するものはないと思います。
役立つ情報がさらに必要な場合はお知らせください。戻ってきたら追加します。前もって感謝します。
編集
私は何が起こっているのか理解しています。この問題を回避する方法を知っているだけです。.then も同じ結果で使用してみました。1 つの要求が拒否されると、他のコールバックを待機する前に失敗コールバックを起動します。