javascript
1/* ********************************** 2 Main 3********************************** */ 4// DOM読み込み後 5$(function () { 6 7 get_productConstructionJson() 8 .then(function(data){ 9 10 // 初期の読み込み処理 11 return get_itemdefineJson(data[0]['items']['shirt']); 12 }) 13 .then(function(html){ 14 console.log('saccess') // dfd.reject(html)なのにsaccessなほうを通る 15 console.log(html) // htmlではなくget_productConstructionJsonのdataが取れてしまう 16 },function(html){ 17 console.log('faild') 18 }); 19 20}); 21 22 23 24/* ********************************** 25 functions 26********************************** */ 27function get_productConstructionJson() { 28 var url = '/json/hoge.json'; 29 var d = new $.Deferred(); 30 31 $.ajax({ 32 url: url, 33 dataType: 'json' 34 }) 35 .done(function (data) { 36 d.resolve(data); 37 }) 38 .fail(function () { 39 d.reject(); 40 }); 41 42 return d.promise(); 43} 44 45function get_itemdefineJson(parentProductIDs) { 46 var deferreds = []; // $.whenのキュー 47 var dfd = new $.Deferred(); 48 var html = ''; 49 50 $.each(parentProductIDs, function (i, val) { 51 var url = val + '/json/huga.json'; 52 53 deferreds.push( 54 (function (i) { 55 var d = new $.Deferred(); 56 57 // 300*i/ミリ秒遅らせる 58 setTimeout(function () { 59 $.ajax({ 60 url: url, 61 dataType: 'json' 62 }) 63 .done(function (data) { 64 html += get_productHtml(data); // returnでhtmlが帰ってきます 65 d.resolve(); 66 }) 67 .fail(function () { 68 d.reject(); 69 }); 70 }, 100 * i); 71 return d.promise(); 72 })(i) 73 ); 74 }); 75 76 $.when.apply($, deferreds).then(function () { 77 dfd.resolve(html); 78 },function(){ 79 console.log('reject') // 最終的にこっちに通過する 80 console.log(html) // ほしい値が取れているのを確認しました 81 dfd.reject(html); 82 }); 83 84 return dfd.promise(); 85}
やりたいこと
dfd.reject(html)
を.then(function(html){})
のなかで受け取りたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/05 02:34
2020/03/05 02:50 編集
2020/03/05 03:44
2020/03/05 03:53
2020/03/05 04:05 編集
2020/03/05 04:07 編集
2020/03/05 04:07
2020/03/05 04:08
2020/03/05 04:21
2020/03/05 04:56 編集
2020/03/05 04:35