IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JS顺序执行延时函数的实现 -> 正文阅读

[JavaScript知识库]JS顺序执行延时函数的实现

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秒输出倒计时,则代码变为:

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结合起来可以方便实现各类型延时,第一种是内设延时,如:

         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){
				 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){
				               resolve();
			                  })
		                    }(); 	                 
					    };
                        
                         runstatus = 1;
                         syncfun();
                         setTimeout(function (){
							runstatus = 0;
						},10000	)	;

–End–

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2022-03-22 20:27:56  更:2022-03-22 20:32:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:57:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码