Closuer and Async

by anribras

JavaScript

function dump(s) {
	document.write(s + '</br>');
}

//模拟异步回调
function asyncOp(cb,t) {
	 setTimeout( ()=>cb(), t);
}

//模拟异步回调带参数
function asyncOpWithArg(cb,arg,t) {
	 setTimeout( ()=>cb(arg), t);
}

//asyncOp(()=>dump('async op'),500);

function* gen(n) {
   dump("in gen");
   while(n >0) {
   		 dump(n);
        //yield n*n;
       yield asyncOp(()=>dump('async op:' + n), n*100);
       n--;
   }
   
   return 0;
}


g = gen(10);

g.next();
g.next();
g.next();


function* gen1(n) {
   dump("in gen");
   while(n >0) {
   		 dump(n);
        //yield n*n;
       yield asyncOpWithArg((n)=>dump('async op with arg:' + n),n, n*200);
       n--;
   }
   
   return 0;
}


h = gen1(10);

h.next();
h.next();
h.next();