JS同步执行延时函数的实现「建议收藏」

JS同步执行延时函数的实现「建议收藏」JS延时函数的实现在C语言里,可以用while(delay–);类似的方法实现延时,而PC侧的JS编程则不能使用这种方式,因为C语言用于嵌入式MCU时常是单核CPU运行,且可以通过硬件中断进行打断控制。而PC侧需要CPU进行多任务处理,采用while的方式会使得系统卡顿。JS异步延时函数JS异步延时函数的实现通过如下方式实现,可以实现延时到特定时间执行后续代码而不会使得系统卡顿:vari=10;functiondelay_exec(){if((i--)>0){

JS同步执行延时函数的实现

在C语言里,可以按代码前后顺序执行,嵌入式MCU通常是单核CPU运行,且可以通过中断进行代码执行过程控制调整。而PC侧需要CPU进行多任务处理,JS语言是异步执行,如果采用while的方式等待旗语再执行后面代码的方式则会使得系统卡顿。所以等待前面的业务完成再进行后面业务的同步执行实现方式不同。

JS同步执行延时函数方式一

JS同步执行延时函数的实现通过如下方式实现,可以延时到特定时间执行后续代码而不会使得系统卡顿:

var i=10;
function delay_exec(){
     if((i--)>0){
          setTimeout(function (){
            console.log(i);
            return delay_exec();

          },1000);
        
     }
     else{
     
        //do things when flag reaches.
        return console.log("end");

     }
}

delay_exec();
console.log("Async running");
只听到从架构师办公室传来架构君的声音:
怎忘得、回廊下,携手处、花明月满。有谁来对上联或下联?

这段代码在每个延时1秒时输出倒计数,并在总延时10秒后执行后续代码。可以根据需要调整需要顺序执行的次数。譬如如果不需要每个1秒输出倒计时,则代码变为:

此代码由Java架构师必看网-架构君整理
var i=1; function delay_exec(){ if((i--)>0){ setTimeout(function (){ //console.log(i); return delay_exec(); },10000); } else{ //do things when flag reaches. return console.log("end"); } } delay_exec(); console.log("Async running");

并且,可以在每次延时的执行代码里调整下一次延时的时间,如:

var i=10;
var dt=1000;
function delay_exec(){
     if((i--)>0){
          setTimeout(function (){
          
            console.log(i);
            dt += 1000;
            return delay_exec();
            
          },dt);        
     }
     else{
     
        //do things when flag reaches.
        return console.log("end");

     }
}

delay_exec();
console.log("Async running");

JS同步执行延时函数方式二

采用promise的方式,实现js同步延时函数。基本概念和使用可以参考 使用 Promise

把promise和async/await结合起来可以方便实现各类型延时,第一种是内设延时,如:

此代码由Java架构师必看网-架构君整理
function xxx(){ return new Promise(function(resolve,reject){ resolve("cascade test"); }) }; const yyy = async function(){ var rtime = 10; while((rtime--)>0){ await xxx().then((value) => { return new Promise(function(resolve,reject){ console.log(value); setTimeout(function (){ resolve(); },2000 ) ; }) }) } return await function(){ return new Promise(function(resolve,reject){ //do things when flag reaches. resolve(); }) }(); } yyy();

第二种是外控延时,如:

         var testnum = 0;
         var runstatus = 0;
	                let syncfun = async function(){
                            while( runstatus == 1 )
						       {
									  await function (){
		                                 return new Promise((resolve, reject) => {
                                             console.log("num: ",testnum++);
											 setTimeout(function (){
												resolve(); 
											 },2000	)	;
										 });
									  }(); 
					            }
		                   return await function(){
			                    return new Promise(function(resolve,reject){
			                    //do things when flag reaches.
				               resolve();
			                  })
		                    }(); 	                 
					    };
                        
                         runstatus = 1;
                         syncfun();
                         setTimeout(function (){
							runstatus = 0;
						},10000	)	;

–End–

架构君码字不易,如需转载,请注明出处:https://javajgs.com/archives/165812
0
 

发表评论