ææ°ã®ããã°ã©ãã³ã°èšèªã§ã¯ãéåæã§å®è¡ãããã³ãŒããããã¯ã䜿çšã§ããŸãã éåæã¢ãããŒãã䜿çšããããšã§åŸãããæè»æ§ãšåãããŠãããã䜿çšããããšãæ¢ããŠãã人ã¯ãã³ãŒãã®çè§£ãšä¿å®ãããé£ãããªããŸãã ãã ããããã°ã©ããŒãçŽé¢ããè€éãã¯ãååãšããŠãæ°ããã¢ãããŒãã®åœ¢ã§å®çšçãªè§£æ±ºçãèŠã€ããããæœè±¡åã®ã¬ãã«ãäžããŸãã éåæããã°ã©ãã³ã°ã®å Žåããã®ãããªããŒã«ã¯ã
é
å»¶çµæãŸãã¯
é
å»¶ ïŒè±èªã®
é
å»¶ -é
å»¶ãé
å»¶ïŒåã®ãªããžã§ã¯ãã§ãã
ãã®èšäºã§ã¯ãéåæã®çµæãã³ãŒã«ããã¯é¢æ°ãé
å»¶ãªããžã§ã¯ããããã³ãããã®æ©èœãè¿ãããã®åºæ¬çãªã¢ãããŒãã«ã€ããŠèª¬æããŸãã JavaScriptã§ãµã³ãã«ãæäŸãããé
å»¶ãµã³ãã«ãªããžã§ã¯ããè§£æãããŸãã ãã®èšäºã¯ãéåæããã°ã©ãã³ã°ãçè§£ãå§ããããã°ã©ããŒãããã³éåæããã°ã©ãã³ã°ã«ç²ŸéããŠããããé
å»¶ãªããžã§ã¯ããææããŠããªãããã°ã©ããŒã«åœ¹ç«ã¡ãŸãã
åæããã³éåæåŒã³åºã
ãã¹ãŠã®é¢æ°ã¯ãåæããã³éåæåœ¢åŒã§èšè¿°ã§ããŸãã äœããã®èšç®ãè¡ã
calc
颿°ããããšããŸãã
éåžžã®ãåæãã¢ãããŒãã®å Žåãèšç®çµæã¯æ»ãå€ãä»ããŠéä¿¡ãããŸããã€ãŸããçµæã¯é¢æ°ãå®è¡ããã
çŽåŸã«å©çšå¯èœ
ã«ãªããå¥ã®èšç®ã§äœ¿çšã§ããŸãã
var result = calc(); another_calc(result * 2);
ã³ãŒãã¯å³å¯ã«é£ç¶ããŠå®è¡ããã1è¡ã§åŸãããçµæã¯æ¬¡ã®è¡ã§äœ¿çšã§ããŸãã ããã¯ã次ã®ã¹ããŒãã¡ã³ããåã®ã¹ããŒãã¡ã³ãããè«ççã«ç¶ãå Žåã®å®çã®èšŒæã飿³ãããŸãã
éåæåŒã³åºãã®å Žåãçµæãé©åã«ååŸã§ããŸããã
calc
颿°ãåŒã³åºããŠãèšç®ãå®è¡ããŠãã®çµæãååŸããå¿
èŠãããããšã®ã¿ã瀺ããŸãã ãã®å Žåãæ¬¡ã®è¡ã¯åã®è¡ãå®äºããã®ãåŸ
ããã«å®è¡ãéå§ããŸãã ããã§ããã©ãã«ãããŠçµæãååŸããå¿
èŠããããããã§ã³ãŒã«ããã¯ã圹ç«ã¡ãŸããããã¯ãèšç®çµæã®å°çæã«ã·ã¹ãã ã«ãã£ãŠåŒã³åºããã颿°ã§ãã çµæã¯åŒæ°ãšããŠãã®é¢æ°ã«æž¡ãããŸãã
calc(function (result) { another_calc(result * 2); }); no_cares_about_result();
äŸãããããããã«ã颿°ã«ã¯ã·ã°ããã£
calc(callback)
ãããã
callback
ã¯çµæãæåã®ãã©ã¡ãŒã¿ãŒãšããŠåãåããŸãã
calc
ã¯éåæã«å®è¡ãããããã
no_cares_about_result
颿°
no_cares_about_result
çµæã«ã¢ã¯ã»ã¹ã§ãããäžè¬çã«èšãã°ãã³ãŒã«ããã¯ãããæ©ãå®è¡ã§ããŸãïŒç¹ã«JavaScriptã«ã€ããŠèšãã°-åŒã³åºããã颿°ãæ¬åœã«éåæã§ãããããã£ãã·ã¥ããããŒã¿ãååŸããªãå Žåãªã©ïŒåŒã³åºãå
ã®ã³ãŒããå®è¡ãããåŸã«åžžã«å®è¡ãããããšãä¿èšŒãããŠããŸããã€ãŸããã³ãŒã«ããã¯ã®åã«æ®ãã®ã³ãŒããåžžã«å®è¡ãããŸããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãïŒã
ãã®ãããªã³ãŒãã¯ããã®ãçŽæ¥çãªãåæã¢ããã°ãšåãã»ãã³ãã£ãã¯ã®è² è·ã§ããã§ã«å€å°çè§£ãé£ãããªã£ãŠããããšãèªããªããã°ãªããŸããã éåæã¢ãããŒãã䜿çšããå©ç¹ã¯äœã§ããïŒ ãŸããã·ã¹ãã ãªãœãŒã¹ã®åççãªäœ¿çšã«ãããŠã ããšãã°ã
calc
ãæéããããèšç®ã§ããå ŽåããŸãã¯å€éšãªãœãŒã¹ã䜿çšããå Žåããã®äœ¿çšã«ã¯äžå®ã®é
å»¶ãçãããããåæã¢ãããŒãã§ã¯ãåŸç¶ã®ãã¹ãŠã®ã³ãŒãã¯çµæãåŸ
æ©ããããã«åŒ·å¶ããã
calc
å®è¡ããããŸã§å®è¡ãããŸããã éåæã¢ãããŒãã䜿çšãããšãã³ãŒãã®ã©ã®éšåãçµæã«äŸåããã©ã®éšåãçµæã«åœ±é¿ãããªãããæç€ºçã«ç€ºãããšãã§ããŸãã ãã®äŸã§ã¯ã
no_cares_about_result
ã¯çµæãæç€ºçã«äœ¿çšããªããããçµæãæåŸ
ããå¿
èŠã¯ãããŸããã ã³ãŒã«ããã¯å
ã®ã³ãŒãã»ã¯ã·ã§ã³ã¯ãçµæãåãåã£ãåŸã«ã®ã¿å®è¡ãããŸãã
äžè¬çã«ãã»ãšãã©ã®APIã¯æ¬è³ªçã«éåæã§ãããåæãªãœãŒã¹ãæš¡å£ã§ããŸãããªã¢ãŒããªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãããŒã¿ããŒã¹ã¯ãšãªããã¡ã€ã«APIã§ãéåæã§ãã APIãåæããè£
ããå Žåããã®ãããªãèŠããããã®æåã¯ãçµæã®é
å»¶ã«é¢é£ä»ããããŸããé
å»¶ãå°ããã»ã©è¯ãã§ãã ããŒã«ã«ãã·ã³ã§åäœããåããã¡ã€ã«APIã¯ããããªé
å»¶ã瀺ããå€ãã®å ŽååæãšããŠå®è£
ãããŸãã ãªã¢ãŒããªãœãŒã¹ã®æäœãšããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ã¯ããŸããŸãéåæçã«å®è£
ãããŸãã
éå±€åããã課é¡
éåæåŒã³åºãã®é£ããã¯ãéåæåŒã³åºããè¡ãã ãã§ãªãããã®çµæãåãåã£ãŠãããã䜿çšããŠå¥ã®éåæåŒã³åºãã§äœ¿çšããå¿
èŠãããå Žåã«ãããé¡èã«ãªããŸãã æããã«ãé£ç¶ããŠå®è¡ãããããã€ãã®ã³ãŒãè¡ãžã®åæã¢ãããŒãã¯ãããã§ã¯é©åã§ã¯ãããŸããã
var result = calc_one(); result = calc_two(result * 2); result = calc_three(result + 42);
ã³ãŒãã¯æ¬¡ã®åœ¢åŒãåããŸãã
calc_one(function (result) { calc_two(result * 2, function (result) { calc_three(result + 42, function (result) {
第äžã«ããã®ã³ãŒãã¯ããã«ãã¬ãã«ãã«ãªããŸããããã¢ã¯ã·ã§ã³ã®ç¹ã§ã¯åæã«äŒŒãŠããŸãã 第äºã«ã
calc_two
ã
calc_three
颿°ã®ã·ã°ããã£ãŒã§ã¯ã
å
¥åãã©ã¡ãŒã¿ãŒãšã³ãŒã«ããã¯ãæ··åšããŠããŸããå®éã«ã¯ã
çµæãè¿ãããå Žæãã€ãŸãåºåãã©ã¡ãŒã¿ãŒã§ãã 第äžã«ãå颿°ã倱æããçµæãåŸãããªãå ŽåããããŸãã
ãã®ã³ãŒãã¯ãã³ãŒã«ããã¯é¢æ°ãåå¥ã«å®çŸ©ããååã§æž¡ãããšã§ç°¡çŽ åã§ããŸãããããã¯ãã¹ãŠã®åé¡ã®è§£æ±ºçã§ã¯ãããŸããã ããã§ã¯æ°ããã¬ãã«ã®æœè±¡åãå¿
èŠã§ããã€ãŸãã
éåæã®çµæãæœè±¡åã§ããŸãã
éåæçµæ
ãã®ãããªçµæã¯äœã§ããïŒ å®éãããã¯çµæããã€ãæ¥ããããã§ã«å°çããŠãããšããæ
å ±ãå«ããªããžã§ã¯ãã§ãã çµæãžã®ãµãã¹ã¯ã©ã€ãã¯åãã³ãŒã«ããã¯ãä»ããŠå®è¡ãããŸããããã®ãªããžã§ã¯ãã«ã«ãã»ã«åãããéåæé¢æ°ãå
¥åãã©ã¡ãŒã¿ãŒãšããŠã³ãŒã«ããã¯ãå®è£
ããããšã矩åä»ããªããªããŸããã
å®éãçµæãªããžã§ã¯ãã«ã¯æ¬¡ã®3ã€ã®ããšãå¿
èŠã§ãïŒçµæããµãã¹ã¯ã©ã€ãããæ©èœãçµæã®å°çãç€ºãæ©èœïŒããã¯APIã¯ã©ã€ã¢ã³ãã§ã¯ãªãéåæé¢æ°èªäœã«ãã£ãŠäœ¿çšãããŸãïŒãå®è£
ãããã®çµæãä¿åãã
ãã®ãããªãªããžã§ã¯ãã®éèŠãªç¹åŸŽã¯ããã®ç¶æ
ã®ç¹ç°æ§ã§ããããŸãã ãã®ãããªãªããžã§ã¯ãã«ã¯ã1ïŒçµæããªãã2ïŒçµæããããšãã2ã€ã®ç¶æ
ããããŸãã ããã«ãé·ç§»ã¯ãæåã®ç¶æ
ãã2çªç®ã®ç¶æ
ã«ã®ã¿å¯èœã§ãã çµæãåŸããããšããããååšããªãç¶æ
ã«ãªã£ãããå¥ã®çµæãæã€ç¶æ
ã«ãªã£ããããããšã¯ã§ããªããªããŸãã
ãã®ãªããžã§ã¯ãã®æ¬¡ã®ç°¡åãªã€ã³ã¿ãŒãã§ã€ã¹ãèããŠã¿ãŸãããã
function Deferred () // constructor function on (callback) function resolve (result)
on
ã¡ãœããã¯ã³ãŒã«ããã¯ãåãå
¥ããŸãã ã³ãŒã«ããã¯ã¯ãçµæãå©çšå¯èœã«ãªããšããã«åŒã³åºããããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸãã ããã¯ããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããéåžžã®ã³ãŒã«ããã¯ãšã®å®å
šãªé¡æšã§ãã ã³ãŒã«ããã¯ç»é²ã®æç¹ã§ããªããžã§ã¯ãã¯çµæã®ããç¶æ
ãšçµæã®ãªãç¶æ
ã«ããå ŽåããããŸãã ãŸã çµæããªãå Žåãã³ãŒã«ããã¯ã¯å°çæã«åŒã³åºãããŸãã çµæããã§ã«ååšããå Žåãã³ãŒã«ããã¯ã¯ããã«åŒã³åºãããŸãã ã©ã¡ãã®å Žåããã³ãŒã«ããã¯ã¯1ååŒã³åºãããçµæãååŸããŸãã
resolve
ã¡ãœããã䜿çšãããšããªããžã§ã¯ããçµæã®ããç¶æ
ã«å€æïŒãªãŸã«ããŒïŒãããã®çµæãæå®ã§ããŸãã ãã®ã¡ãœããã¯ã¹ã
çã§ã ãã€ãŸãã
resolve
åŒã³åºããç¹°ãè¿ããŠããªããžã§ã¯ãã¯å€æŽãããŸããã çµæã®ããç¶æ
ã«é·ç§»ãããšãç»é²ããããã¹ãŠã®ã³ãŒã«ããã¯ãåŒã³åºããã
resolve
åŒã³åºã
åŸã«ç»é²ããããã¹ãŠã®ã³ãŒã«ããã¯ãããã«åŒã³åºãããŸãã ã©ã¡ãã®å ŽåïŒ
resolve
åŒã³åºãã®ååŸã®ç»é²ïŒã§ãããªããžã§ã¯ãããããä¿åãããšããäºå®ã®ããã«ãã³ãŒã«ããã¯ã¯çµæãåãåããŸãã
ãã®åäœãæã€ãªããžã§ã¯ãã¯ã
é
å»¶ ïŒ
promiseããã³
futureãšãåŒã°ã
ãŸã ïŒãšåŒã°ããŸãã åçŽãªã³ãŒã«ããã¯ããããããã€ãã®å©ç¹ããããŸãã
1.çµæããã®éåæé¢æ°ã®æœè±¡åïŒåéåæé¢æ°ã¯ã³ãŒã«ããã¯ãã©ã¡ãŒã¿ãŒãæäŸããå¿
èŠããªããªããŸããã çµæã®ãµãã¹ã¯ãªãã·ã§ã³ã¯ã¯ã©ã€ã¢ã³ãã³ãŒãã«æ®ããŸãã ããšãã°ãçµæãäžèŠãªå Žåã¯ãçµæããµãã¹ã¯ã©ã€ãããå¿
èŠã¯ãããŸããïŒã³ãŒã«ããã¯ãšããŠnoop颿°ãæž¡ãã®ãšäŒŒãŠããŸãïŒã éåæé¢æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããã¯ãªãŒã³ã«ãªããŸããéèŠãªå
¥åãã©ã¡ãŒã¿ãŒã®ã¿ãæã¡ãäžç¹å®æ°ã®ãã©ã¡ãŒã¿ãŒããªãã·ã§ã³ãã©ã¡ãŒã¿ãŒãªã©ãæã€é¢æ°ãããèªä¿¡ãæã£ãŠäœ¿çšããããšãå¯èœã«ãªããŸãã
2.çµæã®ç¶æ
ããã®æœè±¡åïŒã³ãŒãã®ã¯ã©ã€ã¢ã³ãã¯ãçµæã®çŸåšã®ç¶æ
ã確èªããå¿
èŠããªããåã«ãã³ãã©ãŒã«çœ²åããã ãã§ãçµæãå°çãããã©ãããèããŸããã
3.è€æ°ã®ãµãã¹ã¯ãªãã·ã§ã³ã®å¯èœæ§ïŒè€æ°ã®ãã³ãã©ãŒã«çœ²åããããšãã§ããçµæãåä¿¡ãããšããããã¹ãŠãåŒã³åºãããŸãã ã³ãŒã«ããã¯ã¹ããŒã ã§ã¯ãããšãã°ã颿°ã®ã°ã«ãŒããåŒã³åºã颿°ãäœæããå¿
èŠããããŸãã
4.é
å»¶ãªããžã§ã¯ãã®ã代æ°ããªã©ãããã€ãã®è¿œå ã®ã¢ã¡ããã£ãããã«ããããªããžã§ã¯ãéã®é¢ä¿ã倿ãããããã§ãŒã³ã§å®è¡ãããããã®ãããªãªããžã§ã¯ãã®ã°ã«ãŒããæ£åžžã«å®äºãããã§ããŸãã
次ã®äŸãèããŠã¿ãŸãããã éåæé¢æ°
getData(id, onSuccess)
ããããšããŸããããã¯ã2ã€ã®ãã©ã¡ãŒã¿ãŒãåãåããŸãïŒåä¿¡ããèŠçŽ ã®idãšãçµæãååŸããããã®ã³ãŒã«ããã¯ã§ãã ãã®äœ¿çšã®å
žåçãªã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
getData(id, function (item) {
Deferred
ã䜿çšããŠãããæžãæããŸãã ãã®é¢æ°ã«ã¯ã·ã°ããã£
getData(id)
ãããæ¬¡ã®ããã«äœ¿çšãããŸãã
getData(id).on(function (item) {
ãã®å Žåãã³ãŒãã¯ããã»ã©è€éã«ãªãããã¢ãããŒãã¯åçŽã«å€æŽãããŠããŸãã çµæã¯ãé
å»¶ãšããŠé¢æ°ã®æ»ãå€ã«æž¡ãããŸãã ãã ããåŸã§æããã«ãªãããã«ãããè€éãªã±ãŒã¹ã§ã¯ãdeferredã䜿çšãããšã³ãŒãã®å¯èªæ§ãåäžããŸãã
ãšã©ãŒåŠç
ãã®ãããªãªããžã§ã¯ãã䜿çšããå Žåã®ãšã©ãŒåŠçã®åé¡ã¯åççã§ãã åæã³ãŒãã§ã¯ãäŸå€ã¡ã«ããºã ãåºã䜿çšãããŠããŸããããã«ããããšã©ãŒãçºçããå Žåã«ãããŒã«ã«ãã³ãŒââãã倧å¹
ã«è€éåããã«ãã¹ãŠã®ãšã©ãŒããã£ããããŠåŠçã§ãããããããã°ã©ãããããã¿ããšã«ãã§ãã¯ãæžãå¿
èŠããªããªããŸãã
éåæã³ãŒãïŒããã³ã³ãŒã«ããã¯ã®ããåè·¯ïŒã§äŸå€ã䜿çšããã®ã¯å°é£ã§ããäŸå€ã¯çµæã®ããã«éåæã«å°çããããã
try
éåæé¢æ°ã®åŒã³åºãããã¬ãŒãã³ã°ããŠããã£ããã§ããªãããã§ãã ãšã©ãŒãèæ
®ãããšãå®éã«ã¯ãããã¯é¢æ°ã®å¥ã®çµæïŒè² ã®çµæãšèšãããšãã§ããŸãïŒã§ããããšã©ãŒã®ãªããžã§ã¯ãïŒäŸå€ïŒã¯æ»ãå€ãšããŠæ©èœããŸãã
ãã®ãããªçµæã¯ãæåãšåæ§ã«ãã³ãŒã«ããã¯ãšããŠå®è£
ãããŸãïŒ
errback ã
ãšã©ãŒããã®åèªã®åçããã³
backãšãåŒã°ã
ãŸã ïŒã
Deferred
ãã¬ãŒãã³ã°ãªããžã§ã¯ãã匷åããŠãæåãšå€±æã«å¥ã
ã®ãµãã¹ã¯ãªãã·ã§ã³ãæäŸã§ããããã«ããŸããã€ãŸãã
on
ã¡ãœãããååŠçã
on
resolve
ãŸãã
function on (state, callback)
æåã®ãã©ã¡ãŒã¿ãŒãšããŠã
E_SUCCESS
ã
E_ERROR
ãªã©ã®2ã€ã®å€ãæã€åæåã®å€ãæž¡ãããšãã§ããŸãã èªã¿ãããããããã«ãäŸã§ã¯åçŽãªæååå€ãsuccessãããerrorãã䜿çšããŸãã ãŸãããã®ã¡ãœããã匷åã
ã Deferred
ãªããžã§ã¯ã
èªäœãè¿ãããã«ããŸãã ããã«ããããµãã¹ã¯ãªãã·ã§ã³ãã§ãŒã³ã®äœ¿çšãèš±å¯ãããŸãïŒJavaScriptã«éåžžã«åºæã®ææ³ïŒã
resolve
æ¹æ³ã¯ããã«å¿ããŠå€æŽãããŸãã
function resolve (state, result)
æåã®ãã©ã¡ãŒã¿ãŒãšããŠãç¶æ
ã¯
Deferred
ïŒãšã©ãŒãæåïŒãªããžã§ã¯ãã«æž¡ããã2çªç®ã¯çµæã§ãã ç¶æ
ã«ãŒã«ã¯ããã®ãããªå€æŽããããªããžã§ã¯ãã«ãé©çšãããŸããçµæã®ããç¶æ
ãžã®é·ç§»åŸããªããžã§ã¯ãã¯ãã®ç¶æ
ãå¥ã®ãã®ã«å€æŽã§ããŸããã ããã¯ãããšãã°ããªããžã§ã¯ããæåç¶æ
ã«ãªã£ãå Žåããšã©ãŒã«å¯ŸããŠç»é²ããããã¹ãŠã®ãã³ãã©ãŒãæ©èœããªãããšãæå³ããŸãã
ãã®ããã
getData
颿°
getData
äœããã®ãšã©ãŒïŒããŒã¿ãªãã誀ã£ãå
¥åã倱æãªã©ïŒã§å€±æããããã«ããŸãã
ã³ãŒãã¯æ¬¡ã®åœ¢åŒãåããŸãã
getData(id) .on('success', function (item) {
ããçŸå®çãªäŸãèããŠã¿ãŸããããã€ãŸããæšæºã®Node.jsããæšæºã®
fs.readFileã¡ãœããã
ååŸããŸãã ãã®ã¡ãœããã¯ããã¡ã€ã«ã®èªã¿åãã«äœ¿çšãããŸãã èšäºã®åé ã§ãã»ãŒãã¹ãŠã®é¢æ°ãåæã¹ã¿ã€ã«ãŸãã¯éåæã¹ã¿ã€ã«ã§èšè¿°ã§ããããšãè¿°ã¹ãããŸããã æšæºã®Node.jsã©ã€ãã©ãªã§ã¯ããã¡ã€ã«APIã¯
äž¡æ¹ã®ã¹ã¿ã€ã«ã§å®çŸ©ãããå颿°ã«ã¯ç¬èªã®åæå¯Ÿå¿ç©ããããŸãã
ããšãã°ãéåæããŒãžã§ã³ã®readFileã䜿çšããDeferredã䜿çšããããã«èª¿æŽããŸãã
function readFileDeferred (filename, options) { var result = new Deferred; fs.readFile(filename, options, function (err, data) { if (err) { result.resolve('error', err); } else { result.resolve('success', data); } }); return result; }
ãã®ãããªé¢æ°ã¯ãæåãšãšã©ãŒã®é¢æ°ãå¥ã
ã«ç»é²ã§ããããã䜿çšããã®ãå€å°äŸ¿å©ã§ãã
説æãããŠããæ©èœã¯ãã»ãšãã©ã®å Žåã«ååã§ãããå»¶æã«ã¯ããã«å¯èœæ§ããããŸããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
é«åºŠãªé
å»¶ãªããžã§ã¯ãæ©èœ
1.çµæãªãã·ã§ã³ã®æ°ã«å¶éã¯ãããŸããã ãã®äŸã§ã¯ã
Deferred
ãªããžã§ã¯ãã䜿çšããŠãæåãšãšã©ãŒã®2ã€ã®çµæãåŸãããŸããã ä»ã®ïŒã«ã¹ã¿ã ïŒãªãã·ã§ã³ã®äœ¿çšã劚ãããã®ã¯äœããããŸããã 幞ããªããšã«ãç¶æ
ãšããŠæååå€ã䜿çšãããããåæåã倿Žããã«çµæã®ã»ãããå®çŸ©ã§ããŸãã
2.çµæã®
ãã¹ãŠã®ãªãã·ã§ã³ããµãã¹ã¯ã©ã€ãããæ©èœã ããã¯ããã¹ãŠã®çš®é¡ã®äžè¬åããããã³ãã©ãŒã«äœ¿çšã§ããŸãïŒããã¯ã段èœ1ãšçµã¿åãããŠæãçã«ããªã£ãŠããŸãïŒã
3.ãµããªããžã§ã¯ããããã¹ãäœæããŸãã
Deferred
ãªããžã§ã¯ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãããã¯ã©ã€ã¢ã³ãã³ãŒãã
resolve
ã¡ãœããã«ã¢ã¯ã»ã¹ã§ããããšã
Deferred
ãŸãããå®éã«ã¯ããµãã¹ã¯ã©ã€ãããæ©èœã®ã¿ãå¿
èŠã§ãã ãã®æ¹åã®æ¬è³ªã¯
promise
ã¡ãœããã®å°å
¥ã§ã
promise
ã¡ãœããã¯
Deferred
ãªããžã§ã¯ãã®ããµãã»ããããè¿ãããããããµãã¹ã¯ãªãã·ã§ã³ã®ã¿ãå©çšã§ããŸãããçµæã¯èšå®ããŸããã
4.å»¶æãããç¶æ
ããå¥ã®ç¶æ
ãžã®ç¶æ
ã®è»¢éããªãã·ã§ã³ã§ãçµæã倿ããŸãã ããã¯ããã«ãã¬ãã«ã®åŒã³åºãã«éåžžã«åœ¹ç«ã¡ãŸãã
5.ä»ã®é
å»¶ã®ã»ããã®çµæã«äŸåãããé
å»¶ã®äœæã ãã®æ¹åã®æ¬è³ªã¯ãéåææäœã®ã°ã«ãŒãã®çµæããµãã¹ã¯ã©ã€ãããããšã§ãã
2ã€ã®ãã¡ã€ã«ãèªã¿åããäž¡æ¹ã§äœãé¢çœãããšãããå¿
èŠããããšããŸãã ãããè¡ãã«ã¯ã
readFileDeferred
颿°ã䜿çšããŸãã
var r1 = readFileDeferred('./session.data'), r2 = readFileDeferred('./data/user.data'); var r3 = Deferred.all(r1, r2); r3.on('success', function (session, user) { session = JSON.parse(session); user = JSON.parse(user); console.log('All data recieved', session, user); }).on('error', function (err_code) { console.error('Error occured', err_code); });
Deferred.all
ã¯æ°ãã
Deferred
ãªããžã§ã¯ããäœæããæž¡ããã
ãã¹ãŠã®åŒæ°ããã®ç¶æ
ã«æž¡ããããšæåç¶æ
ã«åãæ¿ãããŸãã ããããããšã§ããã¹ãŠã®é
å»¶ã®çµæãåŒæ°ãšããŠåãåããŸãã
å°ãªããšã1ã€ã®åŒæ°ããšã©ãŒç¶æ
ã«ãªããšã
Deferred.all
ã®çµæããã®ç¶æ
ã«ãªããçµæãšããŠãšã©ãŒç¶æ
ã«ãªã£ãåŒæ°ã®çµæãååŸããŸãã
JavaScriptã®é
å»¶æ©èœ
JavaScriptã«ã¯ãã«ãã¹ã¬ãããååšããªãããšã«æ³šæããŠãã ããã ã³ãŒã«ããã¯ã
setInterval
/
setTimeout
ãŸãã¯ã€ãã³ãã«ãã£ãŠèšå®ãããå ŽåãçŸåšã®ã³ãŒãã®å®è¡ãäžæãããã䞊è¡ããŠå®è¡ãããããããšã¯ã§ããŸããã ããã¯ãéåæé¢æ°ã®çµæãå³åº§ã«å°çããå Žåã§ããçŸåšã®ã³ãŒãã®å®è¡ã®å®äºåŸã«ã®ã¿åä¿¡ãããããšãæå³ããŸãã
JavaScriptã§ã¯ã颿°ã¯ä»»æã®æ°ã®ãã©ã¡ãŒã¿ãŒãšä»»æã®ã³ã³ããã¹ãã§åŒã³åºãããšãã§ããŸãã ããã«ãããã³ãŒã«ããã¯ã«å¿
èŠãªæ°ã®ãã©ã¡ãŒã¿ãŒã転éã§ããŸãã ããšãã°ãéåæé¢æ°ãå€ã®ãã¢
(X, Y)
è¿ãå Žåããããã¯2ã€ã®ãã£ãŒã«ããæã€ãªããžã§ã¯ãããŸãã¯2ã€ã®å€ãæã€ãªã¹ãïŒã¿ãã«ã®å³èã®é¡äŒŒç©ïŒãšããŠéä¿¡ã§ããŸãããŸãã¯ããã®ç®çã§ã³ãŒã«ããã¯ã®æåã®2ã€ã®åŒæ°ã䜿çšã§ããŸãã
ãã®å Žåã®ã³ãŒã«ããã¯åŒã³åºãã¯ã次ã®åœ¢åŒãåãããšãã§ããŸãã
callback.call(this, X, Y);
JavaScriptã¯ãªã³ã¯ã䜿çšããã¡ã¢ãªã®è§£æŸã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠå¶åŸ¡ãããŸãã é
å»¶ãªããžã§ã¯ãã¯ãéåæé¢æ°ã®å
éšïŒçµæã®å°çãéç¥ããããïŒãšå€éšïŒçµæãååŸããããã®äž¡æ¹ïŒã®äž¡æ¹ã§å¿
èŠã§ããã¡ã¢ãªãæäœãããã峿 Œãªã¢ãã«ãæã€èšèªã§ã¯ããã®ãããªãªããžã§ã¯ãã®æå¹æéã®æ£ããåŠçã«æ³šæããå¿
èŠããããŸãã
æ¢åã®æ®ã眮ã
1. jQueryã«ã¯ã
$.Deferred
ãªããžã§ã¯ãïŒ
ããã¥ã¡ã³ã ïŒããããŸãã æåããšã©ãŒãé²è¡éç¥ãžã®ãµãã¹ã¯ãªãã·ã§ã³ããµããŒããããŠããŸããçµæãå°çããåã«çæãããäžéã€ãã³ãã ç¶æ
ãå¥ã®DeferredïŒ
then
ã¡ãœããïŒã«è»¢éããããDeferredãªã¹ãã®çµæïŒ
$.when
ïŒã§Deferredãç»é²ãããã
promise
ãäœæãããã§ããŸãã
ãã¹ãŠã®ã©ã€ãã©ãªajaxã¡ãœããã¯ããã®ãããªãªããžã§ã¯ãã®çŽæãè¿ããŸãã
2.
qã©ã€ãã©ãªã¯é
å»¶ãªããžã§ã¯ããå®è£
ããŸããéåæé¢æ°ã®ãã§ãŒã³ãäœæããããšãå¯èœã§ãé
å»¶ãªã¹ãã®çµæã«ãã£ãŠé
å»¶ãç»é²ã§ããŸãã
3.
async.jsã©ã€ãã©ãªã䜿çšãããšãéåæåŒã³åºãã§ãã£ã«ã¿ãŒ/ããã/åæžã䜿çšããéåæåŒã³åºãã®ãã§ãŒã³ãšã°ã«ãŒããäœæã§ããŸãã
4.
when.jsã©ã€ãã©ãªã§ã¯ãdeferredã®äœ¿çšãèš±å¯ãããŸãã
5. Dojo Toolkitã«ã¯ãDeferredãªããžã§ã¯ãïŒ
ããã¥ã¡ã³ã ïŒãå«ãŸããŠããŸãã
6. Pythonã®å
åŒèšèªã§ã¯ãã€ãã³ãé§ååã®
Twistedãã¬ãŒã ã¯ãŒã¯ã«Deferredãªããžã§ã¯ãïŒ
documentation ïŒããããŸãã ãã®å®è£
ã¯éåžžã«å€ããçµæã®é
å»¶ãšããã¢ã€ãã¢ã®ç¥å
ã®æš©å©ã䞻匵ããå ŽåããããŸãã
æåããšã©ãŒãäž¡æ¹ã®çµæã®ãµãã¹ã¯ãªãã·ã§ã³ããµããŒãããŸãã ãªããžã§ã¯ããäžæåæ¢ã§ããŸãã
7. Deferredã«èå³ãããããããã®ãªããžã§ã¯ãã®ç¬èªã®ããŒãžã§ã³ã
äœæããŸãã ïŒ
ããã¥ã¡ã³ã ã
ãœãŒã¹ã³ãŒã ã
ãã¹ã ïŒã ãã®èšäºã§èª¬æãããŠããå€ãã®æ©èœããµããŒããããŠããŸãã
ããã ãã§ãããæž
èŽããããšãããããŸããã