JavaScript如何以最简便的方式实现类似delay(timing)的阻塞延迟效果?

理由
举报 取消

尝试用setTimeout(),发现仅仅是延后执行setTimeout()内部的代码,并且会在到时间之前立刻执行setTimeout()之后的代码。有没有办法进程阻塞,或者直接有一个类似delay()的解决办法?

2018年1月31日 4 条回复 1350 次浏览

回复 ( 4 )

  1. 鲁小夫
    理由
    举报 取消

    js 当然可以阻塞了,死循环,synchronous ajax,alert/prompt/confirm,都可以把主线程阻塞住,但你界面也卡住了。

    还有 Web worker 里的 importScripts(),Node 里面的各种 synchronous API 也都是可以把各自的线程阻塞住的。

    但线程阻塞住了,在这个线程上就不能干点别的了,阻塞主线程尤其是大忌。

    如果你想要的只是暂停一段代码执行,那还是有可能在不阻塞线程的情况下实现的,方法就是利用 generator yield 的可暂停和恢复的特性。

    co(function(){
     yield wait(10*1000);
     doSomethingElse();
    })
    
  2. zeromike
    理由
    举报 取消

    你要的是下面这个吗?

    function sleep(milliSeconds){
        var startTime = new Date().getTime(); // get the current time    
        while (new Date().getTime() < startTime + milliSeconds);
    }
    
    console.log('start...');
    sleep(3000);
    console.log('end...');
    
  3. 梅雪香
    理由
    举报 取消

    你可以让你的代码去适应setTimeout啊

  4. 匿名用户
    理由
    举报 取消

    首先,js进程不推荐阻塞的写法。

    然后,大概只有alert能做到阻塞进程了。

我来回答

Captcha 点击图片更换验证码