js如何阻塞固定时间

js本身没有提供睡眠方法,因为js阻塞了会导致页面渲染等工作也阻塞,所以一般没有这个需求,但是有时候为了测试,需要一个阻塞方法,下面是方法:

方法一: 使用while循环

let sleep = function(ms){
	const endTime = Date.now()+ms;
	while(Date.now() <= endTime){}
}
console.time("test")
sleep(1000)
console.timeEnd("test")

该方法需要传一个时间的参数,单位是毫秒,原理很简单,就是获取到代码调用时的时间戳,然后加上睡眠的时间,获取到结束的时间戳,然后进入while循环,当当前时间不大于结束时间时,一直处于while循环里面,以此达到阻塞的目的,注意:这个阻塞是全部操作都会阻塞,包括页面渲染等操作。

方法二: 使用异步等待(async/await)

let sleep = function(ms){
	return new Promise(resolve=>setTimeout(resolve,ms))
}
async function test(){
	console.time("test")
	await sleep(1000)
	console.timeEnd("test")
}
test()

该方法参数与第一个一样,原理是让js执行完 setTimeout 在执行后面的js代码,这种方式可以阻塞后面的js代码,但是由于async/await是promise的语法糖,所以不会阻塞页面渲染等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值