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

  • 酷狗音乐能设置定时关闭吗(酷狗音乐能设置定时关歌吗)

    酷狗音乐能设置定时关闭吗(酷狗音乐能设置定时关歌吗)

  • 抖音上能私聊吗(抖音上能私聊吗?)

    抖音上能私聊吗(抖音上能私聊吗?)

  • iphone11pro的屏幕尺寸(iphone11pro的屏幕尺寸是多大)

    iphone11pro的屏幕尺寸(iphone11pro的屏幕尺寸是多大)

  • 华为路由器ipv6是什么意思(华为路由器IPV6打开好还是不打开好)

    华为路由器ipv6是什么意思(华为路由器IPV6打开好还是不打开好)

  • 微信视频怎么下载到手机(微信视频怎么下载到本地视频)

    微信视频怎么下载到手机(微信视频怎么下载到本地视频)

  • 三星s10耳机控制不了三星音乐(三星s10耳机无法控制音量大小)

    三星s10耳机控制不了三星音乐(三星s10耳机无法控制音量大小)

  • 佳能相机充电(佳能相机充电器怎么看充满了)

    佳能相机充电(佳能相机充电器怎么看充满了)

  • 抖音只能发60秒吗(我的抖音怎么只能发60秒)

    抖音只能发60秒吗(我的抖音怎么只能发60秒)

  • 手机上方的hd是什么意思(手机上方的hd是什么意思为什么不显示)

    手机上方的hd是什么意思(手机上方的hd是什么意思为什么不显示)

  • 中国移动路由器注册灯一直闪烁无法上网(中国移动路由器怎么改密码wifi密码)

    中国移动路由器注册灯一直闪烁无法上网(中国移动路由器怎么改密码wifi密码)

  • 怎么把旧手机的东西导入苹果11(怎么把旧手机的照片传到新手机上)

    怎么把旧手机的东西导入苹果11(怎么把旧手机的照片传到新手机上)

  • 华为升降摄像头容易坏吗(华为升降摄像头手机)

    华为升降摄像头容易坏吗(华为升降摄像头手机)

  • 步步高和vivo什么关系(步步高和vivo是一个牌子吗)

    步步高和vivo什么关系(步步高和vivo是一个牌子吗)

  • 安卓8g跟12g差别(安卓8g和12g差别)

    安卓8g跟12g差别(安卓8g和12g差别)

  • 低蓝光显示器有用吗(低蓝光显示器会有色差吗)

    低蓝光显示器有用吗(低蓝光显示器会有色差吗)

  • 添加蜂窝号码什么意思(增加蜂窝号码)

    添加蜂窝号码什么意思(增加蜂窝号码)

  • 一加dc调光有什么用(一加的dc调光真的有用吗)

    一加dc调光有什么用(一加的dc调光真的有用吗)

  • 电脑打/怎么打(电脑打怎么打顿号)

    电脑打/怎么打(电脑打怎么打顿号)

  • 标题占位符怎么删除(标题占位符怎么设置宽度)

    标题占位符怎么删除(标题占位符怎么设置宽度)

  • 天猫超市会员可以退吗(天猫超市会员可以退款吗)

    天猫超市会员可以退吗(天猫超市会员可以退款吗)

  • vivo的nfc在哪里打开(vivo中nfc在哪里)

    vivo的nfc在哪里打开(vivo中nfc在哪里)

  • 拼多多闪电退货啥意思(拼多多闪电退货钱先退吗)

    拼多多闪电退货啥意思(拼多多闪电退货钱先退吗)

  • 快手直播在哪看人数(快手直播在哪看回放视频)

    快手直播在哪看人数(快手直播在哪看回放视频)

  • 简述python中标识符的命名规则

    简述python中标识符的命名规则

  • 加密电话是什么意思(加密电话在哪里找到)

    加密电话是什么意思(加密电话在哪里找到)

  • 保险中的车
  • 减免税款最终转到哪个科目?
  • 预缴增值税的销售额怎么填
  • 利润税是多少个点
  • 人头税是什么税
  • 中税税务咨询
  • 进口原料免税
  • 公司网站建设费做账是流量应计入
  • 先报税还是先清卡反写
  • 失业保险稳岗返还是政府补助吗
  • 员工个人承担的保险分录
  • 卖废品开发票开什么货物名称
  • 房地产公司转让土地
  • 公司缴纳个人所得税会计分录
  • 增值税预交怎么计算
  • 预收账款企业所得税怎么处理会计分录
  • 营改增的相关规定
  • 什么税不计入税金及附加科目
  • 现金抵扣到底要不要缴纳增值税?
  • 公司间借款计入什么科目
  • 以下凭证免征印花税的有
  • 采购均价怎么计算
  • 企业取得出售可供出售金融资产该如何写分录呢?
  • w10系统怎么打印文件
  • 苹果Mac系统怎么用光盘安装
  • 联想g40开机屏幕一直闪
  • 网易打不开怎么退出游戏
  • 旧macbookpro
  • 车辆哪些费用计税
  • 纳税申报怎么做
  • 笔记本电脑如何恢复出厂系统
  • php导入
  • 会议费计入什么二级科目
  • 认缴出资没到位违法吗
  • 分期付款购买的商品
  • 补充养老保险的特点
  • 软件集成电路企业所得税优惠政策
  • 参展费会计分录
  • 共识算法主要解决什么问题
  • 百度地图定位不更新
  • 织梦cms为什么不维护了
  • 过期报废产品销毁
  • 税率5个点是什么意思
  • spark sql add jar
  • 工会活动个人奖励标准
  • 银行贷款是应付账款吗
  • 企业关联业务往来情况怎么申报
  • 出口退税进口退税吗
  • 认证超过限制什么意思
  • 小企业会计准则和一般企业会计准则的区别
  • 冲以前年度成本怎么做凭证
  • 税金及附加没有设置二级科目,有啥影响吗
  • 行政事业单位负责人应当对本单位内部控制
  • 购入固定资产一次性扣除政策
  • sqlserver数据库和mysql区别
  • win8安装程序在哪里
  • 安装windowsserver2008r2提示无法定位程序输入点
  • scanfile.exe
  • winload是什么
  • windows media player播放不了mp4
  • win8怎么进系统
  • Mac系统PPTP VPN图文设置教程
  • 快速锁定单元格的方法
  • WindowsPE与WindowsRE有什么区别
  • windowsxp怎么查看用户名密码
  • win10预览版桌面图标和任务栏不翼而飞怎么办?
  • cocos2d开发的知名游戏
  • vs2010配置opengl
  • shell 数组变量
  • Vuforia 4.0 beta——Object Recognition (一)
  • The method setClass(Context, Class<?>) in the type Intent is not applicable for the问题
  • node.js怎么用
  • javascript总结
  • 深入理解计算机系统 电子书
  • 稽查局和税务局哪个好发展
  • 个体经营所得申报密码怎样设置
  • 进一步深造是什么意思
  • 税务局工作业绩
  • 企业所得税可以抵扣吗
  • 地税完税证明是什么样子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设