位置: IT常识 - 正文

JavaScript中实现sleep睡眠函数的几种简单方法(js实现功能)

编辑:rootadmin
JavaScript中实现sleep睡眠函数的几种简单方法

目录

一.什么是sleep函数?

二.为什么使用sleep?

三.实现sleep


一.什么是sleep函数?

推荐整理分享JavaScript中实现sleep睡眠函数的几种简单方法(js实现功能),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript+,javascriptz,js类的实现,javascript运用,js类的实现,js类的实现,js类的实现,javascriptz,内容如对您有帮助,希望把文章链接给更多的朋友!

sleep是一种函数,他的作用是使程序暂停指定的时间,起到延时的效果。

官方介绍:sleep是一种函数,作用是延时,程序暂停若干时间,在执行时要抛出一个中断异常,必须对其进行捕获并处理才可以使用这个函数。

例如:

console.log('1');sleep(2000);console.log('2');

控制台输出数字1后 会间隔2秒后输出数字2

当然上面的代码是不能执行的,因为js中是没有sleep方法的。

所以这一篇文章主要介绍几种在js中实现sleep的方式。

二.为什么使用sleep?

看到这里有人会问了,为什么要使用sleep,上面的例子我可以使用setTimeout来实现啊?

因为setTimeout是通过回调函数来实现定时任务的,所以在多任务的场景下就会出现回调嵌套:

console.time('runTime:'); setTimeout(() => { console.log('1'); setTimeout(() => { console.log('2') setTimeout(() => { console.log('3') console.timeEnd('runTime:'); }, 2000); }, 3000); }, 2000);//结果://1//2//3//runTime:: 7017.87890625 ms

上面的方式存在回调嵌套的问题,我们希望可以利用sleep函数更方便优雅地实现上面的例子。

三.实现sleep

接下来我们就分别用几种不同的方法来实现下sleep方法:

基于Date实现

JavaScript中实现sleep睡眠函数的几种简单方法(js实现功能)

通过死循环来阻止代码执行,同时不停比对是否超时。

function sleep(time){ var timeStamp = new Date().getTime(); var endTime = timeStamp + time; while(true){ if (new Date().getTime() > endTime){ return; } }}console.time('runTime:');sleep(2000);console.log('1');sleep(3000);console.log('2');sleep(2000);console.log('3');console.timeEnd('runTime:');// 1// 2// 3// runTime:: 7004.301ms

缺点:

以上的代码不会让线程休眠,而是通过高负荷计算使cpu无暇处理其他任务。

这样做的缺点是在sleep的过程中其他所有的任务都会被暂停,包括dom的渲染。

所以sleep的过程中程序会处于假死状态,并不会去执行其他任务

基于Promise的sleep

单纯的Promise只是将之前的纵向嵌套改为了横向嵌套:

function sleep(time){ return new Promise(function(resolve){ setTimeout(resolve, time); });}console.time('runTime:');console.log('1');sleep(1000).then(function(){ console.log('2'); sleep(2000).then(function(){ console.log('3'); console.timeEnd('runTime:'); });});console.log('a');// 1// a// 2// 3// runTime:: 3013.476ms

这其实和之前的setTimeout嵌套没什么区别,也很难看。

我们再次进行优化,使用ES6的Generator函数来改写上面的例子

基于Generator函数的sleep

我们对sleep的执行使用Generator函数来执行,并且搭配co来进行自执行。

var co = require('co');function sleep(time){ return new Promise(function(resolve){ setTimeout(resolve, time); });}var run = function* (){ console.time('runTime:'); console.log('1'); yield sleep(2000); console.log('2'); yield sleep(1000); console.log('3'); console.timeEnd('runTime:');}co(run);console.log('a');// 1// a// 2// 3// runTime:: 3004.935ms

可以看到整体的代码看起来不存在嵌套的关系,并且执行过程不会发生假死情况,不会阻塞其他任务的执行。

但是多了一个co执行器的引用,所以还是有瑕疵。

基于async函数的sleep

async函数最大的特点就是自带执行器,所以我们可以不借助co来实现sleep了

function sleep(time){ return new Promise((resolve) => setTimeout(resolve, time));}async function run(){ console.time('runTime:'); console.log('1'); await sleep(2000); console.log('2'); await sleep(1000); console.log('3'); console.timeEnd('runTime:');}run();console.log('a');// 1// a// 2// 3// runTime:: 3009.984ms
本文链接地址:https://www.jiuchutong.com/zhishi/298931.html 转载请保留说明!

上一篇:快速上手Amazon SageMaker动手实验室(快速上手:华硕路由器的wireguard服务器)

下一篇:Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(搭建开发环境)(vue做项目的流程)

  • 微信删除拉黑了对方,对方列表里还有你吗(微信删除拉黑了还能不能恢复聊天记录)

    微信删除拉黑了对方,对方列表里还有你吗(微信删除拉黑了还能不能恢复聊天记录)

  • 微信找不到密码了,手机号也换了,怎么办(微信找不到密码该怎么办)

    微信找不到密码了,手机号也换了,怎么办(微信找不到密码该怎么办)

  • 苹果无线耳机降噪设置(苹果无线耳机降噪功能有杂音)

    苹果无线耳机降噪设置(苹果无线耳机降噪功能有杂音)

  • 图表系统组建失败是什么意思

    图表系统组建失败是什么意思

  • 三星W20怎么截屏(三星w20截屏怎么截)

    三星W20怎么截屏(三星w20截屏怎么截)

  • 小米手机开流量没反应(小米手机开流量老是断网)

    小米手机开流量没反应(小米手机开流量老是断网)

  • 合并居中后如何分行文字(合并居中后如何恢复表格)

    合并居中后如何分行文字(合并居中后如何恢复表格)

  • 抖音直播同城的人进不来是什么情况(抖音直播同城的人进不了直播间)

    抖音直播同城的人进不来是什么情况(抖音直播同城的人进不了直播间)

  • 三星的语音助手怎么喊(三星的语音助手叫什么bixby)

    三星的语音助手怎么喊(三星的语音助手叫什么bixby)

  • 显卡安装失败怎么回事(显卡安装失败怎么调)

    显卡安装失败怎么回事(显卡安装失败怎么调)

  • nova5与nova5ipro的区别(nova5和5ipro哪个好)

    nova5与nova5ipro的区别(nova5和5ipro哪个好)

  • 荣耀20pro与nova5pro的区别(荣耀20pro与nova5pro游戏哪个好)

    荣耀20pro与nova5pro的区别(荣耀20pro与nova5pro游戏哪个好)

  • 为什么手机投屏电视很卡(为什么手机投屏到电视上没有声音)

    为什么手机投屏电视很卡(为什么手机投屏到电视上没有声音)

  • vivo紧急联系人怎么删除(vivo紧急联系人怎么定位手机)

    vivo紧急联系人怎么删除(vivo紧急联系人怎么定位手机)

  • 淘宝淘金币在哪里(淘宝淘金币在哪里领取)

    淘宝淘金币在哪里(淘宝淘金币在哪里领取)

  • 新媒体是什么(新媒体是什么的产物)

    新媒体是什么(新媒体是什么的产物)

  • 云米和米家有什么区别(云米和米家是一个品牌吗)

    云米和米家有什么区别(云米和米家是一个品牌吗)

  • 苹果xsmax可以反向充电吗(iphonexsmax可以反向充电嘛)

    苹果xsmax可以反向充电吗(iphonexsmax可以反向充电嘛)

  • 小米9充电线是几a(小米9充电线是几a的)

    小米9充电线是几a(小米9充电线是几a的)

  • 优聊是什么(优聊聊天平台可以赚钱吗)

    优聊是什么(优聊聊天平台可以赚钱吗)

  • 小米手环4可以看微信信息吗(小米手环4可以刷门禁卡吗)

    小米手环4可以看微信信息吗(小米手环4可以刷门禁卡吗)

  • win10快速启动的坏处(win10快速启动的好处和坏处)

    win10快速启动的坏处(win10快速启动的好处和坏处)

  • win11怎么隐藏文件? windows11显示隐藏文件和文件夹的技巧(win11隐藏图标怎么弄出来)

    win11怎么隐藏文件? windows11显示隐藏文件和文件夹的技巧(win11隐藏图标怎么弄出来)

  • 土地增值税要计增值税吗
  • 个人以房产投资企业需要过户吗
  • 计提税金及附加会计分录
  • 取得交易性金融资产投资收益为什么在借方
  • 累计折旧空运直接计入生产成本吗
  • 一般纳税人的进项税额计入成本吗
  • 红字发票重复提交了数据该怎么处理
  • 一般纳税人的税率是多少个点
  • 政策性搬迁资产损失情况怎么写
  • 公司购买商品房契税税率
  • 淘宝客佣金代扣款是什么意思
  • 营改增后如何计算税金
  • 五险一金账务处理流程图
  • 直接减免的增值税计入哪个科目
  • 个人应纳税所得额 税率
  • 一个人有多份工作
  • 加油票可以抵扣几个点的增值税
  • 运输发票抵税多少个点
  • 广西电子税务局申报
  • 其他应收款要做账吗
  • 流动资产包括哪些形式
  • 企业所得税纳税申报表
  • 民办非企业单位属于什么类型
  • 处理固定资产账务处理税率
  • 委托代销中受托方账务处理
  • 开了百分之五的票怎么办
  • 一般纳税人不能转为小规模纳税人吗
  • qqprotect.exe是什么进程?怎么结束此进程?
  • linux系统查询mac地址命令
  • win10安全中心通知关闭
  • php在apache中有哪些工作方式
  • windows10提示更新11
  • PHP:mb_strrpos()的用法_mbstring函数
  • 无形资产的摊销计入什么科目
  • 试乘试驾车好不好
  • 单位专项资金使用管理规
  • 工业企业出租房屋的租金收入应计入
  • css获取id
  • h5 画图
  • 2022年 change detection遥感图像变化检测 论文附代码
  • 朴素贝叶斯算法
  • 31.JavaScript数组进阶,一网打尽数组操作函数slice、filter、map、reduce、some、every、find、splice
  • 结构体基本知识
  • thinkphp5微信公众号开发
  • 补提企业所得税财务报表应该如何调整
  • 财务咨询公司能出尽调报告吗
  • 商品流通企业购入的商品采用售价金额法核算的
  • 开票机号填错了怎么办
  • 研发辅助账汇总表
  • 固定资产卡片账是什么
  • 收到以前年度增值税退税账务处理怎么做账
  • 利润太高,如何调产品收发存
  • 预付费用款项现金流量怎么算
  • 供货方代垫运费计入什么科目
  • 承租人对融资租赁业务进行会计处理的方法有( )
  • 技术合同免税备案流程
  • 手机属于固定资产吗
  • 出口退税怎么回事
  • 税务局代开发票作废可以申请退税吗?
  • mysql中sum的用法
  • windows怎么用
  • win8.1怎么重新装系统
  • 还原精灵使用教程
  • win8系统安装步骤
  • windows任务栏变色
  • rapapp.exe - rapapp是什么进程 有何作用
  • 电脑开机显示xp后无反应
  • linux查看进程并杀死
  • 安卓下的分件分享怎么弄
  • linux7 snmp
  • 超出div的部分隐藏
  • jquery图片自动滚动
  • shell编程$1
  • nodejs+ts
  • 安卓数据储存方式有哪些
  • js编写一个标准的单例模式类
  • 国家税务总局34号
  • 税务审理工作总结
  • 收到税务局发的多条宣传短信
  • 消费税的征税范围包括
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设