位置: 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做项目的流程)

  • 拼多多好评置顶如何操作(拼多多好评置顶7天)

    拼多多好评置顶如何操作(拼多多好评置顶7天)

  • airpods二代可以用多久(airpods二代可以升级吗)

    airpods二代可以用多久(airpods二代可以升级吗)

  • windows7电脑不受支持怎么办(windows7电脑不受支持怎么解决)

    windows7电脑不受支持怎么办(windows7电脑不受支持怎么解决)

  • 爱奇艺怎么互动播放(爱奇艺怎么互动游戏)

    爱奇艺怎么互动播放(爱奇艺怎么互动游戏)

  • qq群互动标识有哪些(qq群聊互动标识突然没了)

    qq群互动标识有哪些(qq群聊互动标识突然没了)

  • 华为官换机和新机的区别(华为官换机和新机价格)

    华为官换机和新机的区别(华为官换机和新机价格)

  • 微软edge什么意思(microsoft edge叫啥)

    微软edge什么意思(microsoft edge叫啥)

  • 华为荣耀30电池多少毫安(华为荣耀30电池不耐用 咋回事)

    华为荣耀30电池多少毫安(华为荣耀30电池不耐用 咋回事)

  • 华为人脸识别无法录入(华为人脸识别无法打开前置摄像头)

    华为人脸识别无法录入(华为人脸识别无法打开前置摄像头)

  • wps怎么求和快捷键(wpsoffice求和快捷键)

    wps怎么求和快捷键(wpsoffice求和快捷键)

  • oppor9splus自动重启是怎么回事(oppor9p自动重起怎么修)

    oppor9splus自动重启是怎么回事(oppor9p自动重起怎么修)

  • 八核2ghz是骁龙多少(八核2.8hz是骁龙多少)

    八核2ghz是骁龙多少(八核2.8hz是骁龙多少)

  • 苹果6splus充不进去电怎么回事(苹果6splus充不进去开不了机)

    苹果6splus充不进去电怎么回事(苹果6splus充不进去开不了机)

  • 淘宝怎么看删除的订单(淘宝怎么看删除的订单记录)

    淘宝怎么看删除的订单(淘宝怎么看删除的订单记录)

  • ipad2019是第几代ipad(ipad2019属于苹果第几代)

    ipad2019是第几代ipad(ipad2019属于苹果第几代)

  • 微信群加好友一天最多可以加多少(微信群加好友一天加多少不会违规)

    微信群加好友一天最多可以加多少(微信群加好友一天加多少不会违规)

  • 苹果xsmax有没有耳机孔(苹果xsmax有没有红外线)

    苹果xsmax有没有耳机孔(苹果xsmax有没有红外线)

  • 手机怎么设置网速快(手机怎么设置网络密码)

    手机怎么设置网速快(手机怎么设置网络密码)

  • 苹果x三维触控怎么打开(苹果三维触控调高还是低比较好)

    苹果x三维触控怎么打开(苹果三维触控调高还是低比较好)

  • 手机掉了照片怎么找回(手机掉了照片怎样找回来)

    手机掉了照片怎么找回(手机掉了照片怎样找回来)

  • soul头像怎么才会动(soul头像怎么弄的)

    soul头像怎么才会动(soul头像怎么弄的)

  • 微博怎么隐藏超话(微博怎么隐藏超话显示主页)

    微博怎么隐藏超话(微博怎么隐藏超话显示主页)

  • 手机人物拍照角度技巧(手机照人物角度技巧集锦)

    手机人物拍照角度技巧(手机照人物角度技巧集锦)

  • 为什么浏览器下载的东西安装不了(为什么浏览器下载的文件打不开)

    为什么浏览器下载的东西安装不了(为什么浏览器下载的文件打不开)

  • python线性规划的求解方法(python 规划求解)

    python线性规划的求解方法(python 规划求解)

  • 增值税发票税务ukey版开票流程
  • 如何申请一般纳税人
  • 个人所得税怎么申报退税
  • 非限定性净资产相当于本年利润吗
  • 预收货款开票怎么做账
  • 出口退税中哪些是免税的
  • 个税申报初始化密码
  • 出口收入账务处理
  • 客观原因导致的没见过世面
  • 分公司怎么做
  • 期初固定资产净值在资产负债表中的哪里
  • 可交换债券与可转换债券的区别在于
  • 营改增后电力行业非正常损失怎么做会计处理?
  • 冲销估价入账
  • 超市送现金券怎么做账
  • 不动产入股需要交哪些税
  • 外商投资企业清算审计报告
  • 哪些政府补助属于国家
  • 企业购买银行理财
  • 新公司没业务怎么做账
  • 注销一个公司需要多久
  • 季度企业所得税可以弥补以前年度亏损吗
  • 2017年全国税收收入是多少
  • 违约支付工程款的违约金
  • 会计做账中记账表怎么做
  • 银行手续费抵扣税率是多少
  • 车辆保养计入什么二级科目
  • 预付款能开发票吗?
  • mac怎么更换默认打开方式
  • 多发的工资可以从下月扣除吗
  • 家具厂打磨工工作图片
  • 返利是冲减收入吗
  • 数人侵权行为的类型
  • 公司抵押贷款的担保人
  • PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
  • 债务重组 收益
  • 车辆开具发票后会计分录?
  • 增值税普通发票和电子普通发票的区别
  • php操作json
  • php怎么读取txt
  • php使用自定义函数编程求半径r的圆的周长和面积
  • php中url什么意思
  • 公司资金转到法人帐户
  • 现金流量表的附表如何编制
  • 在网上怎么样查个人征信
  • 小规模年销售额500万界定标准
  • 施工单位代建收费合法吗
  • 供货商少开发票金额如何进行会计处理?
  • 公司法人的分类是什么
  • 清包工可以有一部分小料吗
  • 会计需要装订资料有哪些
  • 基于stm32的毕业设计
  • 用友部门核算项目核算
  • 公司收到拆迁补偿金,于评估公司的区别
  • 产权转移书据印花税
  • 减免税做营业外收入的会计分录
  • 控股合并和吸收合并会计处理的区别
  • 转销无法收回的应收账款会计分录
  • 一次性支付意思
  • 如何确定费用归属哪个部门
  • 交去年的企业所得税吗
  • 开具其他发票收入填报异常
  • 生产成本是费用要素吗
  • 单网卡计算机有几个网络接口
  • 安装xp后win7不能用怎么办
  • win7系统播放器在哪
  • 怎样加快电脑开机速度
  • xp系统怎么设置网络传输文件
  • wmiex.exe是什么程序
  • win7更改磁盘分区
  • 电脑开机出现windows7
  • 电脑系统win8怎么样
  • javascript屏蔽元素
  • linux复制文件命令mv
  • c#中抽象类的定义
  • windows7打开命令提示符
  • gridview行数
  • javascript 面向对象
  • 暂停资本化期间,一般借款的借款利息不允许资本化
  • 耕地占用税免税项目需要计入计税依据吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设