å€ãã®çŽæã«ã€ããŠæžãããŠããŸãã ãã®èšäºã¯ãPromiseã䜿çšããããã®æãå®çšçãªããªãã¯ãšããããã©ã®ããã«æ©èœãããã«ã€ããŠã®åççã«è©³çŽ°ãªèª¬æããŸãšããè©Šã¿ã«ãããŸããã
çŽæã®æŠèŠ
ãŸããããã€ãã®å®çŸ©ã
ãããã¹ã¯ãéåæåŒã³åºãã®å®è¡ãå¹çåãããªããžã§ã¯ãã§ãã
éåæåŒã³åºãã¯ãã¡ã€ã³ã³ãŒãã¹ããªãŒã ã®å®è¡ãåŒã³åºãã®çµäºãåŸ
ããªãé¢æ°åŒã³åºãã§ãã ããšãã°ãhttpèŠæ±ã¯ã¡ã€ã³ã¹ã¬ãããäžæããŸããã ã€ãŸããèŠæ±ãå®è¡ããããã®å®äºãåŸ
ããã«ããã«ããã®åŒã³åºãã«ç¶ãã³ãŒããå®è¡ãããhttpèŠæ±ã®çµæãå®äºåŸã«ã³ãŒã«ããã¯é¢æ°ïŒã³ãŒã«ããã¯é¢æ°ïŒã«ãã£ãŠåŠçãããŸãã
次ã«ãpromiseã®æ©èœãé çªã«åŠçããŸãã ããã§ã¯ãç¹å®ã®éåæåŒã³åºããè¡ãããã®promiseãªããžã§ã¯ããæ¢ã«ãããšããäºå®ããé²ããŸãã çŽæãã©ãããæ¥ãã®ãããããŠãããèªåã§ã©ã®ããã«åœ¢æããã®ãã«ã€ããŠã¯åŸã§è©±ããŸãã
1. Promiseã¯ãéåæåŒã³åºãã®ã·ãŒã±ã³ã¹ãå¶åŸ¡ããã¡ã«ããºã ãæäŸããŸãã ã€ãŸããpromiseã¯éåæåŒã³åºãã®åãªãã©ãããŒã§ãã çŽæã¯æ£åžžã«è§£æ±ºãããå Žåãšå€±æããå ŽåããããŸãã ã¡ã«ããºã ã®æ¬è³ªã¯æ¬¡ã®ãšããã§ãã åãããã¹ã¯ãthenïŒïŒãšcatchïŒïŒã®2ã€ã®é¢æ°ãæäŸããŸãã ã³ãŒã«ããã¯é¢æ°ã¯ãåŒæ°ãšããŠåé¢æ°ã«æž¡ãããŸãã 次ã«ãpromiseãæ£åžžã«è§£æ±ºãããå Žåã«ã³ãŒã«ããã¯é¢æ°ãåŒã³åºããããšã©ãŒã®å Žåã«catchã«ã³ãŒã«ãããŸãïŒ
promise.then(function(result){
2.次ã«ç解ãã¹ãç¹ã çŽæã¯äžåºŠã ãèš±å¯ãããŸãã ã€ãŸããpromiseå
ã§çºçããéåæåŒã³åºãã¯1åã ãå®è¡ãããŸãã å°æ¥çã«ã¯ãpromiseã¯éåæåŒã³åºãã®ä¿åãããçµæãè¿ãã ãã§ããããå®è¡ããªããªããŸãã ããšãã°ãçŽæã®çŽæãããå ŽåïŒ
3. thenïŒïŒããã³catchïŒïŒé¢æ°ã¯promiseãè¿ããŸãã ãããã£ãŠãçŽæã®ãã§ãŒã³ãæ§ç¯ã§ããŸãã ãã®å Žåãã³ãŒã«ããã¯é¢æ°ãthenïŒïŒã§è¿ãçµæã¯ãåŸç¶ã®thenïŒïŒã®ã³ãŒã«ããã¯é¢æ°ã®å
¥åãžã®åŒæ°ãšããŠæž¡ãããŸãã ãŸããthrowïŒã¡ãã»ãŒãžïŒåŒã³åºãã®åŒæ°ã¯ãcatchïŒïŒã®ã³ãŒã«ããã¯é¢æ°ã®åŒæ°ãšããŠæž¡ãããŸãã
promise.then(function(result){
4.ãã®çµæãthenïŒïŒã®ã³ãŒã«ããã¯é¢æ°ã¯ãäœããã®å€ã ãã§ãªããå¥ã®ãããã¹ãè¿ãããšãã§ããŸãã ãã®å Žåããã®ãããã¹ã解決ããçµæã¯ãthenïŒïŒã®æ¬¡ã®åŒã³åºãã«è»¢éãããŸãã
promise1.then(function(result1){ return promise2.then(function(result2){
5.ã¢ã¿ããã¡ã³ããªãã®1ã€ã®ç·åœ¢ãã§ãŒã³ã§ãããã¹ã®è§£æ±ºãæ§ç¯ããããšã«ãããåãããšãè¡ãããšãã§ããŸãã
promise1.then(function(result1){ return promise2; }).then(function(result2){
åpromiseãã§ãŒã³ã¯catchïŒïŒåŒã³åºãã§çµäºããããšã«æ³šæããŠãã ããã ãããè¡ããªããšãçºçãããšã©ãŒã¯çŽæã®è
žå
ã§æ¶ãããšã©ãŒãçºçããå Žæãç¹å®ããããšã¯ã§ããªããªããŸãã
ãŸãšãããš
éåæåŒã³åºãã®ã·ãŒã±ã³ã¹ãäœæããå¿
èŠãããå ŽåïŒã€ãŸããåã®åŒã³åºããå®äºããåŸã次ã®ååŒã³åºããå³å¯ã«å®äºããå¿
èŠãããå ŽåïŒããããã®éåæåŒã³åºããäžé£ã®çŽæã«é
眮ããå¿
èŠããããŸãã
çŽæã¯ã©ãããæ¥ãã®ã§ããïŒ
çŽæã¯2ã€ã®æ¹æ³ã§åãåãããšãã§ããŸãã䜿çšããã©ã€ãã©ãªã®é¢æ°ãæ¢æã®çŽæãè¿ãããçŽæããµããŒãããªãé¢æ°ãžã®éåæåŒã³åºããåå¥ã«çŽæã«å€ããããšãã§ããŸãïŒçŽæïŒã åãªãã·ã§ã³ãåå¥ã«æ€èšããŸãã
ã©ã€ãã©ãªé¢æ°ã®çŽæ
å€ãã®ææ°ã©ã€ãã©ãªã¯ãPromiseã䜿çšããäœæ¥ããµããŒãããŠããŸãã ã©ã€ãã©ãªãpromiseããµããŒãããŠãããã©ããã¯ãããã¥ã¡ã³ããã確èªã§ããŸãã äžéšã®ã©ã€ãã©ãªã¯ãã³ãŒã«ããã¯é¢æ°ãšãããã¹ãšããéåæåŒã³åºããåŠçããããã®äž¡æ¹ã®ãªãã·ã§ã³ããµããŒãããŠããŸãã 人çã®äŸãããã€ãèããŠã¿ãŸãããã
ãŠã©ãŒã¿ãŒã©ã€ã³ORMããŒã¿ããŒã¹ã©ã€ãã©ãª
ããã¥ã¡ã³ãã«ã¯ãã©ã€ãã©ãªé¢æ°ã®äœ¿çšäŸãèšèŒãããŠããŸãïŒããŒã¿ãµã³ããªã³ã°ã®äŸã䜿çšïŒã
Model.find({id: [1,2,3]}).exec(function(error, data){ if(error){
ãã¹ãŠãçŸããããã§ãã ãã ããããŒã¿ãéžæããŠåŠçããåŸãããŒã¿ã§ä»ã®æäœãè¡ãå¿
èŠãããå ŽåïŒããšãã°ãããããŒãã«ã®ã¬ã³ãŒããæŽæ°ããå¥ã®ããŒãã«ã«æ°ããã¬ã³ãŒããæ¿å
¥ããïŒãã³ãŒã«ããã¯é¢æ°ã®ãã¹ãã¯ãã³ãŒãã®å¯èªæ§ãæ¥æ¿ã«äœäžããåŸåãããããã«ãªããŸããŒãïŒ
Model.find({id: [1,2,3]}).exec(function(error, data){ if(error){
äžããããäŸã«ã¡ã€ã³ã³ãŒãããªãå Žåã§ããäœãæžãããããç解ããããšã¯ãã§ã«éåžžã«å°é£ã§ãã ãŸããããŒã¿ããŒã¹ã¯ãšãªãã«ãŒãã§å®è¡ããå¿
èŠãããå Žåãã³ãŒã«ããã¯é¢æ°ã䜿çšãããšãã¿ã¹ã¯ã¯é垞解決ã§ããªããªããŸãã
ãã ããWaterline ORMã©ã€ãã©ãªã®é¢æ°ã¯promiseã§æ©èœããŸãããããã¯äœããã®æ¹æ³ã§ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã ãã ããPromiseã䜿çšãããšã人çã倧å¹
ã«ç°¡çŽ åãããŸãã ããŒã¿ããŒã¹ã¯ãšãªé¢æ°ããããã¹ãè¿ãããšãããããŸããã ãããŠããã¯ãçŽæã®èšèªã®æåŸã®äŸã次ã®ããã«æžãããšãã§ããããšãæå³ããŸãã
Model.find(...).then(function(data){
ã©ã¡ãã®ãœãªã¥ãŒã·ã§ã³ãåªããŠããããèšãå¿
èŠã¯ãªããšæããŸãã ãã¹ãŠã®ãšã©ãŒã®åŠçã1ãæã§è¡ãããããã«ãªã£ãããšã¯ç¹ã«åã°ããããšã§ãã åžžã«è¯ããšã¯èšããŸãããã ãšã©ãŒã®ã³ã³ããã¹ããããçºçããç¹å®ã®ãããã¯ãæ確ã§ã¯ãªãããšãããããããã°ãè€éã«ãªããŸãã ãã®å Žåãåpromiseã«catchïŒïŒåŒã³åºããæ¿å
¥ããããšãçŠæ¢ããŸããã
Model.find(...).then(function(data){
ãã®å Žåã§ããã³ãŒãã¯ã³ãŒã«ããã¯é¢æ°ã䜿çšãããããç解ããããã§ãã
MongoDBãæäœããããã®ã©ã€ãã©ãªïŒnode.jsã®ããŒã¹ã©ã€ãã©ãªïŒ
åã®ã±ãŒã¹ãšåæ§ã«ã ããã¥ã¡ã³ãã®äŸã§ã¯ã³ãŒã«ããã¯é¢æ°ã䜿çšããŠããŸãã
MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log("Connected succesfully to server"); db.close(); });
åã®äŸã§æ¢ã«èŠãŠããããã«ãã³ãŒã«ããã¯ã䜿çšãããšãå€æ°ã®éåæåŒã³åºããé£ç¶ããŠè¡ãå¿
èŠãããå Žåã«éåžžã«å°é£ã«ãªããŸãã 幞ããªããšã«ãããã¥ã¡ã³ãã泚ææ·±ã調ã¹ãŠã¿ããšãã³ãŒã«ããã¯é¢æ°ããã®ã©ã€ãã©ãªã®é¢æ°ãžã®åŒæ°ãšããŠæž¡ããªãå Žåãpromiseãè¿ãããããšãããããŸãã ãããã£ãŠãåã®äŸã¯æ¬¡ã®ããã«æžãããšãã§ããŸãã
MongoClient.connect(url).then(function(db){ console.log("Connected succesfully to server"); db.close(); }).catch(function(err){
ãã®ã©ã€ãã©ãªã䜿çšããç¹æ®æ§ã¯ãããŒã¿ããŒã¹ãžã®ã¯ãšãªãå®è¡ããããã«ãããŒã¿ããŒã¹èšè¿°åãªããžã§ã¯ãdbã䜿çšãããããšã§ããããã¯ãconnectïŒïŒãžã®éåæåŒã³åºãã®çµæãšããŠè¿ãããŸãã ã€ãŸããäœæ¥äžã«ããŒã¿ããŒã¹ã«å¯ŸããŠå€ãã®ã¯ãšãªãå®è¡ããå¿
èŠãããå Žåããã®èšè¿°åãæ¯ååä¿¡ããå¿
èŠããããŸãã ãããŠãããã§ãpromiseã䜿çšããããšã§ãã®åé¡ãçŸãã解決ãããŸãã ãããè¡ãã«ã¯ãããŒã¿ããŒã¹ã«æ¥ç¶ãããšããçŽæãå€æ°ã«ä¿åããŸãã
var dbConnect = MongoClient.connect(url);
ãã®ãããªã³ãŒãã®ç·šæã§è¯ãã®ã¯ãããŒã¿ããŒã¹ãžã®æ¥ç¶ãäžåºŠç¢ºç«ãããããšã§ãïŒçŽæã¯äžåºŠã ãèš±å¯ãããä¿åãããçµæãåã«è¿ãããããšãæãåºããŸãïŒã ãã ããäžèšã®äŸã«ã¯1ã€ã®åé¡ããããŸãã ããŒã¿ããŒã¹ãžã®ãã¹ãŠã®ã¯ãšãªãå®äºããåŸãããŒã¿ããŒã¹ãžã®æ¥ç¶ãéããå¿
èŠããããŸãã ããŒã¿ããŒã¹ãžã®æ¥ç¶ãéããããšã¯ãPromiseãã§ãŒã³ã®æåŸã«æ¿å
¥ã§ããŸãã ãã ããèµ·åãã2ã€ã®ãã§ãŒã³ã®ã©ã¡ããæ©ãçµäºãããã¯ããããŸãããã€ãŸãã2ã€ã®ãã§ãŒã³ã®ã©ã¡ããããŒã¹ãžã®æ¥ç¶ã®æåŸã«æ¿å
¥ããããæ確ã§ã¯ãããŸããã Promise.allïŒïŒãåŒã³åºããšããã®åé¡ã解決ã§ããŸãã 圌ã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãã
ãããŸã§ã®éãPromiseã䜿çšããŠéåæåŒã³åºããã«ãŒãã§ç·šæããæ¹æ³ã«ã€ããŠã®è°è«ã¯å»¶æããŸãã çµå±ãåè¿°ã®ããã«ãã³ãŒã«ããã¯ã䜿çšããŠããã®åé¡ããŸã£ãã解決ã§ããŸããã
ããã§ãã©ã€ãã©ãªããµããŒãããŠããªãå Žåã«èªåã§ãããã¹ãäœæããæ¹æ³ã®è³ªåã«ç§»ããŸãããã
çŽæãããïŒçŽæïŒ
ã©ã€ãã©ãªããããã¹ããµããŒãããŠããªãããšããããããŸãã ãããŠãã³ãŒã«ããã¯ã®ã¿ã䜿çšããããšããå§ãããŸãã å°ããªã¹ã¯ãªãããšåçŽãªããžãã¯ã®å Žåãããã§æºè¶³ã§ããŸãã ããããããžãã¯ãè€éãªå Žåã¯ãçŽæãªãã«ã¯ã§ããŸããã ãã®ãããPromiseã§éåæåŒã³åºããã©ããã§ããå¿
èŠããããŸãã
äŸãšããŠãredisãªããžããªããå±æ§å€ãååŸããããã«ãéåæé¢æ°ã§ãããã¹ãã©ããããããšãæ€èšããŠãã ããã redisã©ã€ãã©ãªãŒé¢æ°ã¯promiseããµããŒããããã³ãŒã«ããã¯é¢æ°ã§ã®ã¿æ©èœããŸãã ã€ãŸããæšæºã®éåæé¢æ°åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
var redis = require('redis').createClient(); redis.get('attr_name', function(error, reply){ if(error){
次ã«ããã®é¢æ°ãpromiseã§ã©ããããŸãã JavaScriptã¯ããã®ããã®Promiseãªããžã§ã¯ããæäŸããŸãã ã€ãŸããæ°ããçŽæãäœæããã«ã¯ããããè¡ãå¿
èŠããããŸãã
new Promise(function(resolve, reject){
é¢æ°ã¯åŒæ°ãšããŠPromiseã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ããããã®å
éšã§éåæåŒã³åºããè¡ãããŸãã ãã®é¢æ°ã®åŒæ°ã¯ãresolveããã³rejecté¢æ°ã§ãã éåæåŒã³åºããæåããå Žåã解決é¢æ°ãåŒã³åºãå¿
èŠããããŸãã éåæåŒã³åºãã®çµæã¯ãresolveé¢æ°ã®å
¥åã«æž¡ãããŸãã ãšã©ãŒãçºçããå Žåã¯ãæåŠé¢æ°ãåŒã³åºãå¿
èŠããããŸãã ãšã©ãŒã¯æåŠé¢æ°ã®å
¥åã«æž¡ãããŸãã
ãã¹ãŠããŸãšãããšãgetïŒattrïŒé¢æ°ãååŸãããredisãªããžããªãããã©ã¡ãŒã¿ãŒãååŸããããã®ãããã¹ãè¿ãããŸãã
var redis = require('redis').createClient(); function get(attr){ return new Promise(function(resolve, reject){ redis.get(attr, function(error, reply){ if(error){ reject(error); } else{ resolve(reply); } }); }); }
以äžã§ãã ããã§ãpromiseã«å¯ŸããŠéåžžã®æ¹æ³ã§getïŒïŒé¢æ°ãå®å
šã«äœ¿çšã§ããŸãã
get('attr_name').then(function(reply){
ãªããã®ãã¹ãŠã®èŠãã¿
æ£æ°ãªäººãªã誰ã§ããã®è³ªåãããã§ãããã çµå±ã®ãšãããç§ãã¡ã¯ä»äœãããŠããã®ã§ããããïŒ ïŒéåæïŒé¢æ°åŒã³åºããé çªã«å®è¡ããæ¹æ³ã説æããŠããŸããã ãéåžžã®ãïŒéåæåŒã³åºãã§åäœããªãïŒããã°ã©ãã³ã°èšèªã§ã¯ãããã¯åã«åœä»€ãé çªã«æžãããšã«ãã£ãŠè¡ãããŸãã çŽæã¯å¿
èŠãããŸããã ãããŠãåçŽãªäžé£ã®åŒã³åºããè¡ãã«ã¯ãéåžžã«å€ãã®èŠçããããŸãã ãã¶ããéåæåŒã³åºãã¯ãŸã£ããå¿
èŠãããŸãããïŒ ãããã®ããã«éåžžã«å€ãã®åé¡ããããŸãïŒ
ããããéã®è£å°ã¯ãããŸããã éåæåŒã³åºããååšããå ŽåãåŒã³åºããè¡ãæ¹æ³ãéžæã§ããŸãïŒé 次ãŸãã¯äžŠåã ã€ãŸããããã¢ã¯ã·ã§ã³ã®å®è¡ã«å¥ã®ã¢ã¯ã·ã§ã³ã®çµæã®ååšãå¿
èŠãªå Žåãpromiseã§thenïŒïŒåŒã³åºãã䜿çšããŸãã è€æ°ã®ã¢ã¯ã·ã§ã³ã®å®è¡ãäºãã«ç¬ç«ããŠããå Žåããããã®ã¢ã¯ã·ã§ã³ã䞊è¡ããŠéå§ã§ããŸãã
ããã€ãã®ç¬ç«ããã¢ã¯ã·ã§ã³ã®äžŠåå®è¡ãéå§ããæ¹æ³ã¯ïŒ ãããè¡ãã«ã¯ã次ã®åŒã³åºãã䜿çšããŸãã
Promise.all([ promise_1, promise_2, ..., promise_n ]).then(function(results){
ã€ãŸããpromiseã®é
åãPromise.allé¢æ°ã®å
¥åã«æž¡ãããŸãã ãã®å Žåã®ãã¹ãŠã®çŽæã¯ããã«éå§ãããŸãã Promise.allé¢æ°ã¯ããã¹ãŠã®Promiseãå±¥è¡ããPromiseãè¿ãããããã®å Žåã®thenïŒïŒã®åŒã³åºãã¯ãé
åã®ãã¹ãŠã®Promiseãå±¥è¡ãããåŸã«ããªã¬ãŒãããŸãã thenïŒïŒã§é¢æ°ã®å
¥åã«æž¡ãããresultsãã©ã¡ãŒã¿ãŒã¯ãPromise.allã®å
¥åã«æž¡ãããé åºã§ã®ãããã¹ã®çµæã®é
åã§ãã
ãã¡ãããPromiseã¯Promise.allã«å€ããããšã¯ã§ãããåã«é çªã«å®è¡ããã ãã§ãã ãã ãããã®å Žåããã¹ãŠã®çŽæãå®äºããç¬éã®å¶åŸ¡ã倱ãããŸãã
çŽæãã«ãŒãã«ä¿ã€
å€ãã®å Žåããµã€ã¯ã«å
ã§äžè²«ããŠçŽæãæãããšããã¿ã¹ã¯ããããŸãã ããã§ã¯ãpromiseã䞊åçãªå±¥è¡ãèš±å¯ããå Žåãpromise.allã®å
¥åã«æž¡ãïŒãŸãã¯mapãfilterãªã©ã®é¢æ°ã䜿çšããŠïŒã«ãŒãã§promiseã®é
åãæ§æããããšã¯ç°¡åã§ã¯ãªããããpromiseã®é 次履è¡ãæ£ç¢ºã«æ€èšããŸãã
ã§ã¯ãã©ã®ããã«çŽæãã«ãŒãã«ä¿ã€ã®ã§ããããïŒ çãã¯ç°¡åã§ã-æ¹æ³ã¯ãããŸããã ã€ãŸããå³å¯ã«èšãã°ããµã€ã¯ã«ã§çŽæãæããããšã¯ã§ããŸãããããµã€ã¯ã«ã§ã¯ã次ã
ã«æºããããçŽæã®ãã§ãŒã³ãäœãããšãã§ããŸããããã¯ãåšæçãªéåæã¢ã¯ã·ã§ã³ãšæ¬è³ªçã«åçã§ãã
çŽæã®é£éã®åŸªç°çæ§ç¯ã®ã¡ã«ããºã ã®èå¯ã«ç®ãåããã forã«ãŒããšforEachã«ãŒããšããããã¹ãŠã®ããã°ã©ããŒã«éŠŽæã¿ã®ããã¿ã€ãã®ã«ãŒããåºã«æ§ç¯ããŸãã
forã«ãŒãã§ãããã¹ãã§ãŒã³ãæ§ç¯ãã
äœããã®doSomethingïŒïŒé¢æ°ãäœããã®éåæã¢ã¯ã·ã§ã³ãå®è¡ããçŽæãè¿ãããã®ã¢ã¯ã·ã§ã³ãnåé£ç¶ããŠå®è¡ããå¿
èŠããããšããŸãã promiseèªäœãã次ã®éåæåŒã³åºãã§äœ¿çšãããæååã®çµæãè¿ãããã«ããŸãã ãŸããæåã®åŒã³åºãã空ã®æååã§è¡ããããšä»®å®ããŸãã ãã®å Žåãäžé£ã®çŽæã®æ§ç¯ã¯æ¬¡ã®ããã«è¡ãããŸãã
ãã®ãµã³ãã«ãã³ãã¬ãŒãã§ã¯ã説æãå¿
èŠãªã®ã¯æåã®è¡ã®ã¿ã§ãã æ®ãã¯ãäžèšã®è³æããæããã§ãªããã°ãªããŸããã Promise.resolveïŒïŒé¢æ°ã¯æ£åžžã«è§£æ±ºããããããã¹ãè¿ãããã®çµæã¯ãã®é¢æ°ã®åŒæ°ã«ãªããŸãã ã€ãŸããPromise.resolveïŒ ""ïŒã¯æ¬¡ãšåçã§ãã
new Promise(function(resolve, reject){ resolve(""); });
forEachã«ãŒãã§ã®ãããã¹ãã§ãŒã³ã®æ§ç¯
é
åã®åèŠçŽ ã«å¯ŸããŠéåæã¢ã¯ã·ã§ã³ãå®è¡ããå¿
èŠããããšããŸãã ãã®éåæã¢ã¯ã·ã§ã³ãdoSomethingïŒïŒé¢æ°ã§ã©ãããããšããã®éåæã¢ã¯ã·ã§ã³ãå®è¡ããçŽæãè¿ãããŸãã ãã®å ŽåãçŽæã®é£éãæ§ç¯ããæ¹æ³ã®ãã³ãã¬ãŒãã¯ãå¥åŠãªããšã«ãforEaché¢æ°ã®äœ¿çšã§ã¯ãªããreduceé¢æ°ã®äœ¿çšã«åºã¥ããŠããŸãã
éå§ããã«ã¯ãreduceé¢æ°ã®åäœãæ€èšããŠãã ããã ãã®é¢æ°ã¯ãäžéçµæãç¶æããªããé
åèŠçŽ ãåŠçããããã«èšèšãããŠããŸãã ãããã£ãŠãæçµçã«ã¯ããã®é
åã®ç©åçµæãåŸãããšãã§ããŸãã ããšãã°ãreduceé¢æ°ã䜿çšããŠãé
åã®èŠçŽ ã®åèšãèšç®ã§ããŸãã
var sum = array.reduce(function(sum, current){ return sum+current; }, 0);
reduceé¢æ°ã®åŒæ°ã¯æ¬¡ã®ãšããã§ãã
é
åã®åèŠçŽ ã«å¯ŸããŠåŒã³åºãããé¢æ°ã ãã®é¢æ°ã«æž¡ãããåŒæ°ã¯ãåã®åŒã³åºãã®çµæãé
åã®çŸåšã®èŠçŽ ããã®èŠçŽ ã®ã€ã³ããã¯ã¹ãããã³é
åèªäœã§ãïŒäžèšã®äŸã§ã¯ãæåŸã®2ã€ã®åŒæ°ã¯å¿
èŠããªãããçç¥ãããŠããŸãïŒã
é
åã®æåã®èŠçŽ ãåŠçãããšãã«åã®ã¢ã¯ã·ã§ã³ã®çµæãšããŠæž¡ãããåæå€ã
次ã«ãreduceé¢æ°ã䜿çšããŠã¿ã¹ã¯ã®Promiseã®ãã§ãŒã³ãæ§ç¯ããæ¹æ³ãèŠãŠã¿ãŸãããã
array.reduce(function(actionsChain, value){ return actionsChain.then(function(){ return doSomething(value); }); }, Promise.resolve());
ãã®äŸã§ã¯ãåã®ã¢ã¯ã·ã§ã³ã®çµæã¯actionsChainã®ãããã¹ã§ããã解決åŸãdoSomethingã¢ã¯ã·ã§ã³ãå®è¡ããããã®æ°ãããããã¹ãäœæãããçµæãšããŠè¿ãããŸãã ãã®ãããé
åã®åèŠçŽ ã«å¯ŸããŠãã§ãŒã³ãæ§ç¯ãããŸãã Promise.resolveïŒïŒã¯ãactionsChainã®æåã®çŽæãšããŠäœ¿çšãããŸãã
çŽæã䜿çšããããè€éãªäŸ
çŽæãé©çšããããè€éãªäŸãšããŠãäžæã®èå¥åãçæããããã®ãµãŒãã¹ã®ã³ãŒããã©ã°ã¡ã³ããèããŸãã ãµãŒãã¹ã®æ¬è³ªã¯éåžžã«åçŽã§ãããµãŒãã¹ã«å¯ŸããGETèŠæ±ããšã«ã次ã®äžæã®èå¥åãèšç®ããŠè¿ããŸãã ãã ããè€æ°ã®ç«¶åãããªã¯ãšã¹ããåæã«ãµãŒãã¹ã«éä¿¡ã§ãããšããäºå®ãèãããšããããã®ãªã¯ãšã¹ããåŸç¶ã®å®è¡ã®ããã®ãããã¹ã®ãã¥ãŒïŒãã§ãŒã³ïŒã«äžŠã¹ããšããã¿ã¹ã¯ãçºçããŸãã
ãµãŒããŒã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ããã¯ãnode.jsã§èšè¿°ãããhttpãµãŒããŒã®æšæºã³ãŒãã§ãã processRequesté¢æ°ã¯ãhttpèŠæ±ãã³ãã©ãŒã§ãã ãµãŒãã¹èªäœã¯redisã¹ãã¬ãŒãžã䜿çšããŠãã®ç¶æ
ãä¿åããŸãã redisã®ç¶æ
æç¶ã¡ã«ããºã ã¯ããã®äŸãç解ããã®ã«é¢ä¿ããªããããèæ
®ãããŸããã ãã ãããµãŒããŒãã·ã£ããããŠã³ããããredisã§æ¥ç¶ãéããå¿
èŠããããŸããããã¯äžèšã®ã³ãŒãã«åæ ãããŠããŸãã å¯äžéèŠãªããšã¯ããªã¯ãšã¹ãããšã«processRequesté¢æ°ãåŒã³åºãããããšã§ãã èŠæ±ãã¥ãŒã¯requestQueueã®çŽæã§ãã 次ã«ãã³ãŒãèªäœãæ€èšããŸãã
var requestQueue = Promise.resolve(); function processRequest(req, res){ requestQueue = requestQueue .then(function(){
calcUUID(), . , . . , , .
ãããã«
, , . .
, . - .