美文网首页
新建一个sleep(延迟)函数

新建一个sleep(延迟)函数

作者: 感觉不错哦 | 来源:发表于2019-10-29 11:02 被阅读0次

sleep(1000) 意味着等待1000毫秒执行

想到延迟很容易会用setTimeout函数,但由于这是异步操作无法同步化,那么利用好promise这个问题就很好解决了!!

    const sleep = time=>{
        return new Promise(resolve=>setTimeout(resolve,time))
    }

那么new Promise(resolve=>setTimeout(resolve,time))就是sleep函数的核心了

    //ES5写法

    var sleep = function(time){
        return new Promise(function(resolve){
            return setTimeout(function(){
               resolve()
            },time)
        })
    }


    sleep(1000).then(()=>{
        console.log(1)
    })

更早之前,ES5的时候都是使用回调的形式

    function sleep(callback,time){
        if(typeof callback==='function'){
            setTimeout(callback,time)
        }
    }

    function out(){
        console.log(1)
    }

    sleep(out,1000)

这样并没有同步化,其实不是很好,还是建议使用promise

    // async awit

    function sleep(time) {
         return new Promise(resolve => setTimeout(resolve,time))
    }
    async function output() {
            let out = await sleep(1000);
            console.log(1);
            return out;
          }
    output();
还可以配合generator函数
    function * generator(time){
        yield new Promise(resolve=>setTimeout(resolve,time))
    
    }

    generator(1000).next().value.then(()=>{
        console.log(1)
    })

这玩意其实还有一种玩法

    function * generator(time){
        yield new Promise(resolve=>setTimeout(resolve,time))
        yield new Promise(resolve=>setTimeout(resolve,time*2))
        yield new Promise(resolve=>setTimeout(resolve,time*3))
        yield new Promise(resolve=>setTimeout(resolve,time*4))
        yield new Promise(resolve=>setTimeout(resolve,time*5))
    }



    for( i of generator(1000)){
        i.then(()=>{
            console.log(1)
        })
    }

相关文章

网友评论

      本文标题:新建一个sleep(延迟)函数

      本文链接:https://www.haomeiwen.com/subject/gngjmctx.html