ã©ã€ãã©ãªã®ãã®æ°ããæ©èœã¯ããã³ãã©ãŒïŒã³ãŒã«ããã¯ïŒã®é 延åŒã³åºãã«ããäœæ¥ãç°¡çŽ åããããšãç®çãšããŠããŸãã jQueryãšåæ§ã«ãé 延ãªããžã§ã¯ãã¯ãã§ãŒã³å¯èœã§ãããç¬èªã®ã¡ãœããã»ããããããŸãã ä»åºŠã¯å€ãã®ãã³ãã©ãæ€åºããããšãå¯èœãªç¹°å»¶ãªããžã§ã¯ããåå ãã¥ãŒã»ãã³ãã©ã«ç»é²ããåæãŸãã¯éåææ©èœã®ããã«ããå®äºããŸãã¯ããšã©ãŒãã«ç¶æ ãåãæ¿ããŸãã
æŠèŠ
ã¢ã€ãã¢ã¯éåžžã«åçŽã§ãïŒé 延ãªããžã§ã¯ããäœæãããã®ãªããžã§ã¯ãããã³ãã©ãŒãããã¯ã§ããïŒãŸãã¯ããã¯ããªãïŒå€éšã³ãŒãã«æž¡ãã1ã€ã®ãªããžã§ã¯ãã¡ãœãããåŒã³åºãã ãã§ãããã®ãã³ãã©ãŒã®å®è¡ãéå§ããå¿ èŠããããŸãã
é 延ãªããžã§ã¯ãã䜿çšããããã»ã¹å šäœã¯ã3ã€ã®ã°ããŒãã«ã¹ããŒãžã«åå²ã§ããŸãã
- é 延ãªããžã§ã¯ããäœæããã³åæåããããã®ç¶æ ã¯ãæªå®è¡ãã§ãã
- çµæã®ãªããžã§ã¯ãã¯å€éšã³ãŒãã«å¯ŸããŠçºè¡ããããã³ãã©ãŒã¯deferred.thenïŒïŒ ã deferred.doneïŒïŒããã³deferred.failïŒïŒã¡ãœããã«ãã£ãŠãã¥ãŒå ã®ãªããžã§ã¯ãã«è¿œå ãããŸãã ãã³ãã©ãŒã«ã¯ããå®è¡åŠçããšããšã©ãŒåŠçãã®2ã€ã®ã¿ã€ãããããŸãã
- ãªããžã§ã¯ããäœæãããã³ãŒãã§ããã€ãã®æ¡ä»¶ïŒã€ãã³ãïŒãæºããããã«ããã³ãã©ãŒãå®è¡ããã¡ãœãããåŒã³åºãããŸãïŒ deferred.resolveïŒïŒãã³ãã©ãŒããæåãã«åŒã³åºãããªããžã§ã¯ãã®ç¶æ ããå®äºãã«å€æããŸããdeferred.rejectïŒïŒãªããžã§ã¯ãã®ç¶æ ãããã£ã³ã»ã«ãã«å€æããŸãã
é 延ãªããžã§ã¯ãã®èª¬æã«ããããã¥ãŒããšããèšèã¯ãçç±ã®ããã«äœ¿çšãããŸãããã¥ãŒã«è¿œå ããããã³ãã©ãŒã¯ãè¿œå ãããé ã«åŒã³åºãããŸãïŒå ã«è¿œå ãããæ¹ãå ã«åŒã³åºãããŸãïŒã
ãã³ãã©ãŒãè¿œå ããå Žåãé 延ãªããžã§ã¯ãã®ç¶æ ïŒæ¢ã«å®è¡ãŸãã¯ãã£ã³ã»ã«ãããŠããå ŽåïŒã確èªããå¿ èŠã¯ãŸã£ãããããŸããã ãrunã/ãerrorããã³ãã©ãŒãæ¢ã«ãrunã/ãcanceledããªããžã§ã¯ãã«è¿œå ãããå Žåãããã«åŒã³åºãããŸãã
é 延ãªããžã§ã¯ãã§ç¹°ãè¿ã解決/æåŠã®åŒã³åºããè¡ã£ãŠãããã®ç¶æ ãšãã³ãã©ãŒãžã®ã³ãŒã«ããã¯ã¯å€æŽãããŸããããåã«ç¡èŠãããŸãïŒä»¥åã«ã©ã®è§£æ±ºïŒïŒãŸãã¯æåŠïŒïŒãåŒã³åºããããã¯é¢ä¿ãããŸããïŒã
繰延ãªããžã§ã¯ãã®ã¡ãœããïŒãã¹ãŠã§ã¯ãªãïŒããšãæå³ãã«ã¯ãé£é»ããããåé¢ããè¡ãªããžã§ã¯ãã«è€æ°ã®ã¡ãœãããåŒã³åºãããšãå¯èœãšãªãå ã®ãªããžã§ã¯ããžã®åç §ãè¿ããŸãã ããšãã°ã次ã®ããã«ãªããŸããdeferred.doneïŒcallback1ïŒ.failïŒcallback2ïŒ;
ã¡ãœããã®èª¬æ
deferred.doneïŒdoneCallbacksïŒ
é 延ãªããžã§ã¯ãããå®äºãç¶æ ã«ãªã£ããšãã«åŒã³åºããããã³ãã©ãŒãè¿œå ããŸã
deferred.failïŒfailCallbacksïŒ
é 延ãªããžã§ã¯ããããã£ã³ã»ã«ãç¶æ ã«ãªã£ããšãã«åŒã³åºããããã³ãã©ãŒãè¿œå ããŸã
deferred.thenïŒdoneCallbacksãfailCallbacksïŒ
ãã³ãã©ã¯çŽã¡ã«äžèšäž¡ã¿ã€ããç䟡ã¬ã³ãŒãdeferred.doneïŒdoneCallbacksïŒ.failïŒfailCallbacksïŒãè¿œå ããŸã
äžèšã®3ã€ã®ã¡ãœããã§ã¯ãåã ã®é¢æ°ãŸãã¯é¢æ°ã®é åãdoneCallbacksãfailCallbackã®åŒæ°ãšããŠæ©èœã§ããŸãã
deferred.resolveïŒåŒæ°ïŒ
ãå®äºãã®ç¶æ ã«é 延ãªããžã§ã¯ããå€æããåŒæ°ã®ãã©ã¡ãŒã¿ãæã€ãã¹ãŠã®ãã³ãã©ã®doneCallbacksïŒéåžžã®è»¢éãã©ã¡ãŒã¿ã®ã«ã³ãïŒãåŒãèµ·ãããŸã
deferred.rejectïŒåŒæ°ïŒ
é 延ãªããžã§ã¯ããããã£ã³ã»ã«ãç¶æ ã«ããargsãã©ã¡ãŒã¿ãŒã§ãã¹ãŠã®failCallbacksãã³ãã©ãŒãåŒã³åºããŸã
äžèšã®2ã€ã®ã¡ãœããã䜿çšããå Žåã®ãã³ãã©ãŒã®åŒã³åºãïŒé¢æ°å ïŒã®ã³ã³ããã¹ãã¯ãé 延ãªããžã§ã¯ãïŒãŸãã¯ãæ圱ãäœæã§ããªãå Žåã¯ãªããžã§ã¯ãèªäœïŒã®æ圱ã«ãªããŸãïŒé 延æ圱ãšã¯ãdeferred.promiseïŒïŒã®èª¬æãåç §ïŒã å¥ã®åŒã³åºãã³ã³ããã¹ãã§ãã³ãã©ãŒé¢æ°ãå®è¡ããå Žåã¯ã次ã®2ã€ã®ã¡ãœããã䜿çšããå¿ èŠããããŸãã
deferred.resolveWithïŒã³ã³ããã¹ããåŒæ°ïŒ
deferred.rejectWithïŒã³ã³ããã¹ããåŒæ°ïŒ
æ¹æ³å šãåæ§.resolveïŒåŒæ°ïŒãš.rejectïŒåŒæ°ïŒã¯ãå¯äžã®ã³ã³ããã¹ãã¯ããã®ããŒã¯ãŒããä»ããŠãã³ãã©é¢æ°å ã®å©çšã§ããããã«ãªããŸã
ã¡ãœããã䜿çšããŠãé 延ãªããžã§ã¯ãã®ç¶æ ã確èªã§ããŸãã
deferred.isResolvedïŒïŒ
deferred.isRejectedïŒïŒ
ã¡ãœããã¯ããªããžã§ã¯ãã®çŸåšã®ç¶æ ã«å¿ããŠtrueãŸãã¯falseãè¿ããŸãã ãã³ãã©ãŒãå®è¡ããããšãïŒãã ããæåŸã®ãã³ãã©ãŒã¯ãŸã å®è¡ãããŠããŸããïŒã察å¿ããã¡ãœããã¯trueãè¿ããŸãã
deferred.promiseïŒïŒã䜿çšããŠæ圱ãäœæãã
ãã®æ¹æ³ã¯ããæ圱»繰延ãªããžã§ã¯ããäœæããè¿ããŸã - ããã¯ãã³ãã©ãè¿œå ããç¶æ ã確èªããããã®ã¡ãœãããæã€ãªããžã§ã¯ãã®ã³ããŒãsvoebraznayaã ã€ãŸã å ãšåããã³ãã©ãŒã®ãã¥ãŒã§åäœããé 延ãªããžã§ã¯ããååŸããŸãããã³ãã©ãŒãè¿œå ã§ããå ã®ãªããžã§ã¯ãã®ç¶æ ã衚瀺ã§ããŸãããå ã®ãªããžã§ã¯ãã®ç¶æ ãå€æŽããããšã¯ã§ããŸããã
æ圱ãäœæãããšãæå®ã®äœçœ®ã«å€éšã³ãŒããã³ãã©ãè¿œå ããæ©èœãæäŸãããæã«å¿ èŠã§ãããäžæ£ãªåŒã³åºãæ¹æ³ããä¿è·ãããšåæã«ããªããžã§ã¯ãã®ç¶æ ãå€æŽããŸãã
é 延ãªããžã§ã¯ãã®äœæ
é 延ãªããžã§ã¯ããäœæããã«ã¯ã2ã€ã®æ¹æ³ããããŸãã$ .DeferredïŒïŒã¡ãœããã䜿çšããŠæ°ãããã€ãã£ãã€ã³ã¹ã¿ã³ã¹ãäœæããïŒæ°ããããŒã¯ãŒãã¯ãªãã·ã§ã³ã§ãïŒãã$ .whenïŒargsïŒã¡ãœãããåŒã³åºããŠã以åã«äœæããé 延ãªããžã§ã¯ãã䜿çšããŸãã
$ .DeferredïŒfuncïŒ
ãã®ã¡ãœããã¯ãæ°ããé 延ãªããžã§ã¯ããè¿ããŸãã funcåŒæ°ã¯ãªãã·ã§ã³ã§ããäœæããããªããžã§ã¯ããåæåããé¢æ°ãæž¡ããŠãããã³ã³ã¹ãã©ã¯ã¿ããè¿ãããšãã§ããŸãã funcé¢æ°å ã§ã¯ãthisããã³/ãŸãã¯æåã®é¢æ°åŒæ°ãä»ããŠãåæåãããé 延ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã
$ .whenïŒé 延1ãé 延2ã...ïŒ
ãã®ã¡ãœããã¯ããã¹ãŠã®åŒæ°ïŒé 延ãªããžã§ã¯ãïŒããã®ç¶æ ã«ãªãããå°ãªããšã1ã€ã®åŒæ°ãåãæ¶ããããšããã«ããã£ã³ã»ã«ãç¶æ ã«ãªããšããå®è¡ãç¶æ ã«ãªãé 延ãªããžã§ã¯ããäœæããããã«äœ¿çšãããŸãã
ãã¹ãŠã®ã¿ã¹ã¯ãå®äºããã®ãåŸ ã£ãŠããã¿ã¹ã¯ãå®äºãããå Žåã¯ããã®å Žåã¯ãã®ã¡ãœããã䜿çšããŸãã
äŸ1
$.when($.get( '/echo/html/' ), $.post( '/echo/json/' )).done( function (args1, args2) { alert( " " ); });
ãã®ã³ãŒãã¯ãäž¡æ¹ã®ããŒãžãæå®ããããããã¯ã«æ£åžžã«ããŒããããåŸã«ã®ã¿ããããŒããå®äºããŸããããšããã¡ãã»ãŒãžã衚瀺ããŸãã
éé 延ãªããžã§ã¯ãã$ .whenïŒïŒã®åŒæ°ãšããŠæ€åºãããå Žåããã®ã¿ã¹ã¯ã¯ãã§ã«æ£åžžã«å®äºããŠãããšã¿ãªãããã¡ãœããããã°ã©ã ã¯æ®ãã®åŒæ°ã«ãã£ãŠã¬ã€ããããŸãã
$ .whenïŒïŒã¡ãœããã§åãåã£ãé 延ãªããžã§ã¯ããåŒã³åºãã³ã³ããã¹ãïŒé¢æ°å ïŒã«ãããå®è¡ãç¶æ ã«ãªããšããã®é 延ãªããžã§ã¯ãã®ãããžã§ã¯ã¿ãŒãæ圱ããã$ã§æž¡ããã察å¿ããå®è¡åŒæ°ãå«ãé åãåŒæ°ãšããŠãã³ãã©ãŒã«æž¡ãããŸãã .whenïŒïŒé 延ãªããžã§ã¯ãïŒãŸãã¯1ã€ã®åŒæ°èªäœïŒããå ŽåïŒïŒã äžèšã®äŸã§ã¯ãargs1ã¯æåã®ajaxãªã¯ãšã¹ãã«å¯ŸããŠæåãåŒã³åºãåŒæ°ã®é åã§ãããargs2ã¯2çªç®ã®ãªã¯ãšã¹ãã«å¯ŸããŠã§ãã
$ .ajaxïŒïŒã§é 延ãªããžã§ã¯ãã䜿çšãã
jQuery 1.5ã§ã¯ãajaxãšã³ãžã³ãæ ¹æ¬çã«æžãæãããã $ .ajaxïŒïŒã¡ãœãããšãã®ççž®ããŒãžã§ã³ãé 延ãªããžã§ã¯ãã䜿çšããããã«ãªããŸããã ããã«ãããããã€ãã®ãã³ãã©ãŒãèŠæ±å®äºã€ãã³ãã«ïŒæåãŸãã¯èª€ã£ãŠïŒããªãç°¡åãªæ¹æ³ã§å²ãåœãŠãããšãã§ãããã³ãã©ãŒãããã€ãã®äžŠåèŠæ±ã®å®äºã«å²ãåœãŠãããšãã§ããŸãã
ã¡ãœãã$ .ajaxïŒïŒã$ .getïŒïŒã$ .postïŒïŒã$ .getScriptïŒïŒã$ .getJSONïŒïŒãããé 延ãªããžã§ã¯ãã®æ圱ãæã€ãªããžã§ã¯ããè¿ãããŸãã ãã¥ãŒã«ãã³ãã©ãè¿œå ãããã®ãªããžã§ã¯ãã$ .whenïŒïŒã®åŒæ°ãšããŠäœ¿çšã§ããã¡ãœããããããŸãã
ãã®ãªããžã§ã¯ãã«å ããŠãã¡ãœããã®å矩èªãè¿œå ãããŸããããã¯ãajaxãªã¯ãšã¹ãã®ãããã¯ã«ããé©ããŠããŸãã
- deferred.success = deferred.done - ããªãã¯èŠæ±ãå®äºã«æåãã³ãã©ãè¿œå
- deferred.error = deferred.fail - ãšã©ãŒãã³ãã©ã®èŠæ±ãå®äºããè¿œå
- deferred.complete-ãªã¯ãšã¹ãå®äºãã³ãã©ãŒãè¿œå ããŸãïŒæåãŸãã¯ãšã©ãŒã«é¢ä¿ãªãïŒãæå/å®äºãŸãã¯ãšã©ãŒ/倱æã«ããè¿œå ããããã¹ãŠã®ãã³ãã©ãŒã®åŸã«åŒã³åºãããŸã
èå³æ·±ãäºå®
$ .whenïŒïŒã¡ãœããã¯ãé 延ãªããžã§ã¯ãã«å±ããŠãããã©ããã®åŒæ°ãè©äŸ¡ãããšãã«ã.promiseïŒïŒã¡ãœããã®ååšã確èªããŸãããã®ãããªã¡ãœãããååšããå Žåããå·Šããªããžã§ã¯ããé 延ãšèŠãªãããŸãã ãã®ãããªãå·Šãã®ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ãããšã延æããããã®ããã«å®è¡ãšã©ãŒãçºçãããããããã«ãã°ãé¢é£ä»ããããŠããŸãã
jQueryïŒjquery-git.jsïŒã®ææ°ã®éçºããŒãžã§ã³ã§ã¯ãé 延ãªããžã§ã¯ãã«ã.invertïŒïŒã¡ãœããããããããã¯.promiseïŒïŒã¡ãœãããšåæ§ã«ãããã®éãã¡ãœããã®ã¿ã§ãªããžã§ã¯ãã®ãããžã§ã¯ã·ã§ã³ãäœæããŸãïŒdone <=> failãisResolved < => isRejectedãçŽæ<=>å転ã ãã®æ¹æ³ã®é©çšã¯ãŸã æ°ã¥ããŠããŸããã
䜿çšäŸ
äŸ1.ïŒäžèšãåç §ïŒã¯ãããã€ãã®Ajaxãªã¯ãšã¹ãã®å®äºã远跡ãããšããå žåçãªåé¡ã®è§£æ±ºçããã§ã«ç€ºããŠããŸãã
äŸ2
// 3
function test() {
var d = $.Deferred();
setTimeout( function () { d.resolve(); }, 3000);
return d.promise();
}
var t = test().done( function () { alert( " " ); });
//
setTimeout( function () {
alert( " " );
t.done( function () { alert( "" ); });
}, 5000);
* This source code was highlighted with Source Code Highlighter .
ããã¯åãªããã¢ã®äŸã§ãé 延ãªããžã§ã¯ããæ§ç¯ããããã®ç¶æ ã¯3ç§åŸã«ãå®äºãã«å€æãããå€éšã³ãŒãã«çºè¡ãããŸãã å€éšã³ãŒãã§ã¯ã1ã€ã®ãã³ãã©ãŒãããã«è¿œå ãããŸããç¶æ ãæ¢ã«ãå®äºãããŠããå Žåã3ç§åŸã«åŒã³åºããã5ç§åŸã«2çªç®ã«åŒã³åºããããããè¿œå æã«ããã«åŒã³åºãããŸãã
äŸ3
< div id ="d1" style ="width:100px;height:100px;background:red;" > 1 </ div >
< div id ="d2" style ="width:100px;height:100px;background:green;" > 2 </ div >
* This source code was highlighted with Source Code Highlighter .
//
var a1 = $.Deferred(),
a2 = $.Deferred();
$( '#d1' ).slideUp(2000, a1.resolve);
$( '#d2' ).fadeOut(4000, a2.resolve);
a1.done( function () { alert( 'a1' ); });
a2.done( function () { alert( 'a2' ); });
$.when(a1, a2).done( function () { alert( 'both' ); });
* This source code was highlighted with Source Code Highlighter .
ãã®ã³ãŒãã¯ãè€æ°ã®ã¢ãã¡ãŒã·ã§ã³ãå®äºããåŸã«ã³ãŒããå®è¡ããå¿ èŠãããå Žåã®ãããçŸå®çãªåé¡ã®è§£æ±ºçã®äŸã瀺ããŠããŸãã 1ã€ã®èŠçŽ ã«ã¢ãã¡ãŒã·ã§ã³å®äºãã³ãã©ãŒãè¿œå ããã®ã¯éåžžã«ç°¡åã§ãïŒããã䜿çšãããŸãïŒããç¬ç«ããã¢ãã¡ãŒã·ã§ã³ã®å®äºã远跡ããã®ã¯å€å°é£ãããªããŸãã ãªããžã§ã¯ãã®äœ¿çšåã³ç¹°å»¶$ .whenïŒïŒã®ã³ãŒãã§ç解ãããããªããŸãã
ãã¹ãŠã®ãµã³ãã«ã¯ã jsfiddle.netãµãŒãã¹ã§å®è¡ããã³ç¢ºèªã§ããŸãã
ææïŒ
blog.jquery.com/2011/01/31/jquery-15-released
api.jquery.com/category/deferred-object
www.erichynds.com/jquery/using-deferreds-in-jquery ïŒç¿»èš³ïŒ habrahabr.ru/blogs/jquery/112960 ïŒ
JQuery 1.5ã®ãœãŒã¹ã³ãŒããšããã¥ã¡ã³ã