javascriptã§éåæå¦çãforæã§åãããã
- æ®éã«æ¸ãã¨
setTimeout( () =>{console.log('a');},4000); setTimeout( () =>{console.log('b');},3000); setTimeout( () =>{console.log('c');},2000); setTimeout( () =>{console.log('d');},1000);
éåæãªã®ã§åºåã¯d,c,b,aã«ãªãã
- åæçã«æ¸ãã¨ä¾ã«ãã£ã¦ã³ã¼ã«ããã¯å°çã«ãªãã
setTimeout( () =>{ console.log('a'); setTimeout( () =>{ console.log('b'); setTimeout( () =>{ console.log('c'); setTimeout( () =>{ console.log('d'); },1000) },2000) },3000) },4000)
- éåæã®å ´åã³ã¼ã«ããã¯ã®é¨åãforæã«ããã¨
var arr = ['a','b','c','d']; for(var i=0;i<arr.length;i++){ setTimeout( function(x){ console.log(x);}.bind(null,arr[i]),(4-i)*1000); }
- åæã®å ´åã¯foræã§ãªãå帰ã«ãªã£ã¦ãã¾ãã
var arr = ['a','b','c','d']; setTimeout( function loop(arr){ console.log(arr.shift()); if(arr.length!=0){ setTimeout(loop.bind(null,arr),arr.length*1000) } }.bind(null,arr),arr.length*1000);
- ãããjQueryã®$.Defferedã使ã£ã¦æ¸ãç´ãã¨
var arr = ['a','b','c','d']; var d = new $.Deferred(); d.resolve(arr); for(var i=0;i<arr.length;i++){ d = d.then(function(arr) { var d = new $.Deferred(); setTimeout(function(arr){ console.log(arr.shift()); d.resolve(arr); }.bind(null,arr) ,arr.length*1000) return d.promise(); }) }
foræã§æ¸ããããããã ã¨å帰ã¨ããã¾ãå¤ãããªããã
- ES6 Promiseã®å ´å
(function(){ var arr = ['a','b','c','d']; var d = Promise.resolve(); for(var i=0;i<arr.length;i++){ d = d.then( function(i){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ console.log(arr[i]); resolve(); } ,(4-i)*1000) }) }.bind(null,i)) } })();
ããã ãsetTimeoutã§console.logãåºåããã ãã®åæå¦ç½®ããªãã§ãããªã«å¤§å¤ã«ãªããã ãã....ã
ã¡ãªã¿ã«ãã³ã¼ã«ããã¯é¢æ°ã«å¼æ°ã渡ãã¨ãã¯bindããå¿ è¦ãããã®ã§æ³¨æãããã¨ãããéè¦
ãã®ã¾ã¾æ®éã«å¼æ°ã渡ãã¨ã渡ããå¤ã弿°ã«å³æå®è¡ãããã
- ééã
function(arr){ console.log(arr.shift()); resolve(arr); }(arr)
- æ£ãã
function(arr){ console.log(arr.shift()); resolve(arr); }.bind(null,arr)
ã¾ããã¢ãã¼é¢æ°ã¯bindã§ããªããã§ãæ®éã®å¿å颿°function(){}使ã£ã¦ãã ããã
- ããã¯ã§ããªã
arr => { console.log(arr.shift()); resolve(arr); }.bind(null,arr)
ã¨ãã§ãã¾ããã
ã¢ãã¼é¢æ°ã¯bindã§ããªãã¨ããããthisãå«ãã¦
å¤ã®ãããã¯ãbindããããã弿°ã«arrãæ¸¡ãã¡ããã¡ã ã£ãã
ä¸ã®ããã«é¢æ°ã®å¼æ°arrãå®ç¾©ããªããã°ãªãã±ã¼
() => { console.log(arr.shift()); resolve(arr); }
ã§ããã¡ããã¨å¤ã渡ããªããã¨ãããã®ã§ããã®å ´åã¯é常ã®å¿å颿°function()ã§bindããæ¹ãããã
ã¢ãã¼é¢æ°ã®ã¹ã³ã¼ããã¤ãã¤ãåãããã
- ããã¦generator Promiseç
function co(g){ var p = g.next(); if(p.done) return; p.value.then(()=>{ co(g); }); } var arr = ['a','b','c','d']; co(function* gen(arr){ for(var i=0;i<arr.length;i++){ yield new Promise( resolve =>{ setTimeout(resolve,(4-i)*1000); }); console.log(arr[i]); } }(arr))
ã¡ããã¨foræã«ãªã£ã¦ããæãããã¾ãã
ã¡ãã£ã¨co颿°ãéªéã§ãã...ã