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同步执行延时函数的实现相关推荐

  1. js同步异步 回调函数

    学js这么久 只知道它是一个单线程的语言,同步异步听了这么多从未深思过. 在写ajax请求时再一次看见回调函数,想到在网上去查查详细的知识,没想到查出一大堆讲同步异步的,看了不少人的文章,这才感觉自己 ...

  2. 使用Async同步执行异步函数

    为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱. 我有一个类似下面代码的场景,依据数组中的每一个元素执行一个 ...

  3. JS 立即执行的函数表达式(function)写法

    1. 前言 函数需要先定义,后使用. 这基本上所有编程语言的一条铁的定律. 一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用. 看一个例子 <!-- ...

  4. 我去,JS自执行匿名函数竟然有20几种写法!

    为什么80%的码农都做不了架构师?>>>    发现一个新的自执行写法: { var x; x=1; alert(x);} //2013-01-30 14:45:57 //五大类,2 ...

  5. STC12C5A60S2自主适应时钟延时函数

    快速导航 STC12已封装好的函数库 单片机延时函数的原理: 延时函数里执行的是空语句,单片机程序指针经过执行的空语句来达到延时的目的. 单片机使用延时函数的优点就是很容易就能写出软件延时程序. 但是 ...

  6. js延时函数_js自执行函数分享

    自执行函数是从哪里了解到的呢,从学习延时器settimeout(fn,time)的时候 测试一个for循环里面加一个延时器,想要每隔一秒输出一次i for(var i=0;i<6;i++){ s ...

  7. JS Array.map方法内异步方法无法同步执行

    问题: JS Array.map方法内异步方法无法同步执行 场景: 我们在使用map来设置每一项值的时候,涉及到异步操作,就会出现问题. 按照常规,重现出一种情形. 假设我要使用map对每一项值进行操 ...

  8. js文件引用方式及其同步执行与异步执行

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp74 任何以appendChild(scriptNode) 的方式引入的j ...

  9. 解秘 Node.js 单线程实现高并发请求原理,以及串联同步执行并发请求的方案

    最近在做一个支持多进程请求的 Node 服务,要支持多并发请求,而且请求要按先后顺序串联同步执行返回结果. 对,这需求就是这么奇琶,业务场景也是那么奇琶. 需求是完成了,为了对 Node.js 高并发 ...

  10. js等待异步执行完再执行,js如何让代码同步执行

    JS方法怎么同步执行 . 方法1内部用了var表示内部变量执行完一次后会自动释放:方法2内的变量cc不能与方法1重名:示例代码如下测试可以varstr='';functioncfun(obj){str ...

最新文章

  1. 语言转4字节数据整型_R语言与RGui平台_数据类型_向量_4
  2. 新概念英语(1-73)The way to King Street
  3. 【Groovy】json 序列化 ( JsonBuilder 生成器 | 生成带根节点名称的 json 字符串 | 生成不带根节点名称的 json 字符串 )
  4. 微服务技术发展的现状与展望
  5. matlab cell转数组_MATLAB批量修改文件名
  6. 【项目管理】三球模型
  7. 怎么设置vscode界面大小_vscode怎么放大界面
  8. PropertyChangeSupport的使用
  9. 浏览器卡死 (但是内存还不到一半)
  10. 红帽子linux改ip命令,Linux系统下图形界面更改IP地址
  11. 利用PYTHON代码,自动玩王者荣耀,再也不担心女朋友打电话
  12. CAD绘图教程之CAD中怎么进行消防计算?
  13. 工资管理系统的开发设计
  14. Linux命令之top命令
  15. 系统之家U盘 win10默认网关是什么
  16. IP-Guard准入控制网关实现机制
  17. 来吧!带你玩转 Excel VBA
  18. 怎么查询计算机二级证书快递号,计算机二级office查询成绩后的注意事项证书直邮申请17到到23号...
  19. 第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势
  20. 饥荒联机版修改在线模式

热门文章

  1. LitJson扩展支持float类型和自定义类型
  2. 怎么增加C盘空间大小,教你如何调整C盘容量【图文教程 无损数据】分区助手如何给磁盘分区 分区助手使用方法教程
  3. 筛选法求100以内的素数
  4. python:求100以内素数的和
  5. 基于Java实现宠物领养救助交流平台设计和实现
  6. 拼音字母搜索匹配汉字
  7. oracle asm空间利用率,ASM磁盘组状态和使用率的监控
  8. jsp在校大学生助学贷款管理系统
  9. c语言笔试题 选择题,C语言笔试选择题
  10. 腾讯app看视频看不了显示服务器没有返回,腾讯视频TV版暂停服务怎么办?教你方法!...