JQuery の when の fail は待ってくれない
JQuery を使ってて、複数の非同期通信( $.ajax() )が全て終わってから処理をしたい場合がありまして、$.ajax() の戻り値を配列に突っ込んで、$.when で処理しようとしたのですが・・・。
全て成功の場合はそれで良かったのですが、どれか一つでも非同期通信が失敗すると、そこで when の fail が走っちゃうみたいなんですよね。
今回は成功でも失敗でも、とにかく全ての処理の終了を待ちたかったので、これではちょっと困ります。
というわけで調べてみたら、$.Deferred() を使うとできそうなのでやってみました
ソースコードは以下のような感じになります。
$.Deferred() とはなんぞや? というところに関しては、理解が及んでいないのでパスさせていただくとして、とりあえず resolve() をセットすれば結果が成功に倒れます。
ちなみに失敗をセットする時は reject() を使います。
あとキモになるのは、判定用の配列に詰め込むのが Deferred オブジェクトの promise() メソッドの戻り値というところでしょうか。
これでOK!