使用原生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这一套

参考

https://juejin.cn/user/149189312383694/posts

posted @ 2021-04-01 11:50  HelloCoderRookie  阅读(346)  评论(0编辑  收藏  举报