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){//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–
JS同步执行延时函数的实现相关推荐
- js同步异步 回调函数
学js这么久 只知道它是一个单线程的语言,同步异步听了这么多从未深思过. 在写ajax请求时再一次看见回调函数,想到在网上去查查详细的知识,没想到查出一大堆讲同步异步的,看了不少人的文章,这才感觉自己 ...
- 使用Async同步执行异步函数
为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱. 我有一个类似下面代码的场景,依据数组中的每一个元素执行一个 ...
- JS 立即执行的函数表达式(function)写法
1. 前言 函数需要先定义,后使用. 这基本上所有编程语言的一条铁的定律. 一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用. 看一个例子 <!-- ...
- 我去,JS自执行匿名函数竟然有20几种写法!
为什么80%的码农都做不了架构师?>>> 发现一个新的自执行写法: { var x; x=1; alert(x);} //2013-01-30 14:45:57 //五大类,2 ...
- STC12C5A60S2自主适应时钟延时函数
快速导航 STC12已封装好的函数库 单片机延时函数的原理: 延时函数里执行的是空语句,单片机程序指针经过执行的空语句来达到延时的目的. 单片机使用延时函数的优点就是很容易就能写出软件延时程序. 但是 ...
- js延时函数_js自执行函数分享
自执行函数是从哪里了解到的呢,从学习延时器settimeout(fn,time)的时候 测试一个for循环里面加一个延时器,想要每隔一秒输出一次i for(var i=0;i<6;i++){ s ...
- JS Array.map方法内异步方法无法同步执行
问题: JS Array.map方法内异步方法无法同步执行 场景: 我们在使用map来设置每一项值的时候,涉及到异步操作,就会出现问题. 按照常规,重现出一种情形. 假设我要使用map对每一项值进行操 ...
- js文件引用方式及其同步执行与异步执行
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp74 任何以appendChild(scriptNode) 的方式引入的j ...
- 解秘 Node.js 单线程实现高并发请求原理,以及串联同步执行并发请求的方案
最近在做一个支持多进程请求的 Node 服务,要支持多并发请求,而且请求要按先后顺序串联同步执行返回结果. 对,这需求就是这么奇琶,业务场景也是那么奇琶. 需求是完成了,为了对 Node.js 高并发 ...
- js等待异步执行完再执行,js如何让代码同步执行
JS方法怎么同步执行 . 方法1内部用了var表示内部变量执行完一次后会自动释放:方法2内的变量cc不能与方法1重名:示例代码如下测试可以varstr='';functioncfun(obj){str ...
最新文章
- 语言转4字节数据整型_R语言与RGui平台_数据类型_向量_4
- 新概念英语(1-73)The way to King Street
- 【Groovy】json 序列化 ( JsonBuilder 生成器 | 生成带根节点名称的 json 字符串 | 生成不带根节点名称的 json 字符串 )
- 微服务技术发展的现状与展望
- matlab cell转数组_MATLAB批量修改文件名
- 【项目管理】三球模型
- 怎么设置vscode界面大小_vscode怎么放大界面
- PropertyChangeSupport的使用
- 浏览器卡死 (但是内存还不到一半)
- 红帽子linux改ip命令,Linux系统下图形界面更改IP地址
- 利用PYTHON代码,自动玩王者荣耀,再也不担心女朋友打电话
- CAD绘图教程之CAD中怎么进行消防计算?
- 工资管理系统的开发设计
- Linux命令之top命令
- 系统之家U盘 win10默认网关是什么
- IP-Guard准入控制网关实现机制
- 来吧!带你玩转 Excel VBA
- 怎么查询计算机二级证书快递号,计算机二级office查询成绩后的注意事项证书直邮申请17到到23号...
- 第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势
- 饥荒联机版修改在线模式
热门文章
- LitJson扩展支持float类型和自定义类型
- 怎么增加C盘空间大小,教你如何调整C盘容量【图文教程 无损数据】分区助手如何给磁盘分区 分区助手使用方法教程
- 筛选法求100以内的素数
- python:求100以内素数的和
- 基于Java实现宠物领养救助交流平台设计和实现
- 拼音字母搜索匹配汉字
- oracle asm空间利用率,ASM磁盘组状态和使用率的监控
- jsp在校大学生助学贷款管理系统
- c语言笔试题 选择题,C语言笔试选择题
- 腾讯app看视频看不了显示服务器没有返回,腾讯视频TV版暂停服务怎么办?教你方法!...