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的语法糖,所以不会阻塞页面渲染等操作。