使用原生JavaScript实现sleep函数
插曲:昨晚面试问到了这个问题,自己答的也不是很好。查缺补漏吧!
主要功能就是能够让程序等待设置的时间
函数签名:
sleep(sleepTime)
sleepTime的单位是毫秒
方案一:使用Date + for-loop
优点:足够简单,通俗易懂
缺点: 简单粗暴的new Date,如果等待的时间长的话,很可能把机器卡死
综上:不适合长时间等待
function seelp(sleepTime) {
for(let start = new Date; new Date -start <= sleepTime;){}
}
方案二:Promise + setTimeout
function sleep(sleepTime) {
return new Promise(resolve =>{setTimeout(resolve,time);});
}
方案三:Async + Await + Promise
兼容性问题:babel在这里就可以大显伸手了
目前对babel的使用,和原理还没有学习,接下来的时间补上!
function sleep(sleepTime) {
return new Promise(resolve=>{
setTimeout(resolve,sleepTime);
});
}
// 使用的时候配合async + await
(async function(){
const t1 = new Date;
await sleep(4000);
const t2 = new Date;
console.log(t2-t1);
})();
总结:
实现这个sleep函数,主要是两大派方法,第一就是简单粗暴的使用Date来记录时间,加上for-loop
第二个就是使用 promise来实现,然后在使用的方式上可以沿用promise的一套,或者 async+await这一套
参考
慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!