非同期にサーバにリストを取りにいき、
取得できたら画面に描画する処理を実装しています。
1つでも表示できたらそのフィールドのタイトルを表示したいのですが、
jQuery.deferredで実装する場合どのような手段があるでしょうか。
ご教示お願いいたします。
現在下記のように実装していますが、これは期待通りの動作はしません。
$.when()で動かした場合、1つでもrejectされたらfail()が実行されるためです。
一応resolveとreject、doneとfailを逆に扱えば実現は可能ですが、
可読性が著しく悪いのと、異常事態に対処できない気がするので別の手を捜しているところです。
javascript
1 var arrFunc = []; 2 for (var i=0; i<p.length; i++) { 3 4 var promise = function(){ 5 6 var deferred = $.Deferred(); 7 8 $.ajax({ 9 data:data, 10 url:"url://", 11 method:"POST", 12 dataType:"json", 13 }).done(function(list){ 14 15 if(!list.length) { 16 deferred.reject(); 17 return; 18 } 19 20 /*処理*/ 21 22 deferred.resolve(); 23 }) 24 .fail(function(){ 25 deferred.reject(); 26 }); 27 28 return deferred.promise(); 29 30 }; 31 arrFunc.push(promise()); 32 } 33 34 // 実行 35 $.when.apply(null, arrFunc) 36 .done(function(){ 37 // 1つでも成功したらここを通りたい 38 }) 39 .fail(function(){ 40 // 全部失敗したらここを通りたい 41 });
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/28 07:26