配列をforEachでまわし、内側で走る非同期処理がすべて終了したタイミングをひろい、次の処理に続けたい場合どのような方法があるでしょうか?node.js で keyの配列をforEachでまわし、内側でredis-client.get()を利用するケースを想定しています。
下記の方法で目的の動作はできているのですが、何かスマートじゃないような...
そもそも、forEach?また、まだ利用できていないのですが、generatorを使って次の処理をsleepしておく方法?などもありそうな気がしています。他に良い方法があれば教えていただければ幸いです。よろしくお願いします。
javascript
1var keysArr = ['a','b','c','d','e','f','g','h','i','j','k','l']; 2var forEachWithAsync = function(arr) { 3 return new Promise(function(resolve) { 4 var cnt = 0; 5 console.log('length: ' + arr.length); 6 arr.forEach(function(val, idx, arr) { 7 // node_redis client.get(key, function(err, val) {...}); を使うケースを想定 8 setTimeout(function() { 9 ++cnt; 10 console.log(cnt + ' async log: ' + val); 11 if(cnt === arr.length) { resolve(); } 12 }, Math.round(Math.random()*10000)); 13 }); 14 }); 15} 16 17forEachWithAsync(keysArr) 18.then(function() { console.log('end'); });
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/15 12:16
2016/04/15 12:28
2016/04/15 15:47