• 使用原生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

    慢慢来,比较快!基础要牢,根基要稳!向大佬致敬!
  • 相关阅读:
    hutool 导出excel 何苦
    PHP header 的7种用法 何苦
    JavaVolatile
    JVMjava内存区域
    JAVA内存泄露与溢出
    同步与互斥
    java线程池
    Java Synchronized
    docker 命令和使用
    leetcode(c++)(博弈类dp)
  • 原文地址:https://www.cnblogs.com/rookie123/p/14605658.html
Copyright © 2020-2023  润新知