https://teratail.com/questions/51611
上記記事に関連する質問です。
やりたいこと
再帰的な非同期処理を順番に実行したい
以下サンプルソースのprocess2非同期処理結果を元に
process2subの非同期処理実行し、
その結果で、更にデータの残りが無いか非同期処理を実行するような
subについて、再帰関数で非同期処理を呼び出すイメージです。
この実装はどのようにしたらわかりません。。
サンプルソースを例示いただけると助かります。
サンプルソース
javascript
1 2 var process1 = function(val) { 3 var deferred = $q.defer(); 4 5 // 仮想非同期 6 setTimeout(function(){ 7 if (val) { 8 deferred.resolve('ok: ' + val); 9 } else { 10 deferred.reject('ng; ' + val); 11 } 12 }, 2000); 13 14 return deferred.promise; 15 }; 16 17 var process2 = function(val) { 18 var deferred = $q.defer(); 19 20 // 仮想非同期 21 setTimeout(function(){ 22 if (val) { 23 deferred.resolve('ok: ' + val); 24 } else { 25 deferred.reject('ng; ' + val); 26 } 27 }, 2000); 28 29 return deferred.promise; 30 }; 31 32 var process3 = function(val) { 33 var deferred = $q.defer(); 34 35 // 仮想非同期 36 setTimeout(function(){ 37 if (val) { 38 deferred.resolve('ok: ' + val); 39 } else { 40 deferred.reject('ng; ' + val); 41 } 42 }, 2000); 43 44 return deferred.promise; 45 }; 46 47 var process4 = function(val) { 48 var deferred = $q.defer(); 49 50 // 仮想非同期 51 setTimeout(function(){ 52 if (val) { 53 deferred.resolve('ok: ' + val); 54 } else { 55 deferred.reject('ng; ' + val); 56 } 57 }, 2000); 58 59 return deferred.promise; 60 }; 61 62 var process5 = function(val) { 63 var deferred = $q.defer(); 64 65 // 仮想非同期 66 setTimeout(function(){ 67 if (val) { 68 deferred.resolve('ok: ' + val); 69 } else { 70 deferred.reject('ng; ' + val); 71 } 72 }, 2000); 73 74 return deferred.promise; 75 }; 76 77 process1('process1') 78 .then(function(val) { 79 // 処理 80 console.log('process1: ' + val); 81 return process2('process2') 82 }) 83 .then(function(val) { 84 // 処理 85 console.log('process2: ' + val); 86 return process3('process3') 87 }) 88 .then(function(val) { 89 // 処理 90 console.log('process3: ' + val); 91 return process4('process4') 92 }) 93 .then(function(val) { 94 // 処理 95 console.log('process4: ' + val); 96 return process4('process5') 97 }) 98 .then(function(val) { 99 console.log('finish'); 100 }) 101 ; 102
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。