最近自己试验性的写了一个可以实现同步调用的JS函数。
使用的递归的原理。
var syncExe = function(){ var fLen = arguments.length; var exe = function(funcs,count,sum,retval){ if(!!retval){ if(!('return' in exe)){ exe['return'] = []; } exe['return'].push(retval); } if(count == sum){ return; }else{ funcs[count](function(str){ count++; exe(funcs,count,sum,str); }); } } exe(arguments,0,fLen); return exe['return']; };
使用
var f1 = function(cb){ for(var i =0;i<100;i++){ console.log('f1_'+i); } cb('f111'); }; var f2 = function(cb){ for(var i =0;i<100;i++){ console.log('f2_'+i); } cb('f222'); }; var f3 = function(cb){ for(var i =0;i<100;i++){ console.log('f3_'+i); } cb('f333'); }; var ret = syncExe(f1,f2,f3); //ret = ['f111','f222','f333']