行动之间的延迟

有没有一种方法可以在JavaScript执行另一个操作之前进行睡眠?

例:

 var a = 1+3;
 // Sleep 3 seconds before the next action here
 var b = a + 4;

你可以使用setTimeout来达到类似的效果:

var a = 1 + 3;
var b;
setTimeout(function() {
    b = a + 4;
}, (3 * 1000));

这并不真正“睡眠”JavaScript--它只是在一定的持续时间(以毫秒为单位)后执行传递给setTimeout的函数。 尽管可以为JavaScript编写睡眠函数,但如果可能,最好使用setTimeout ,因为它不会在睡眠期间冻结所有内容。


如果你确实需要sleep()来测试某些东西。 但请注意,它会在大多数情况下在调试时崩溃浏览器 - 可能这就是为什么您需要它。 在生产模式中,我会注释掉这个功能。

function pauseBrowser(millis) {
    var date = Date.now();
    var curDate = null;
    do {
        curDate = Date.now();
    } while (curDate-date < millis);
}

不要在循环中使用new Date() ,除非想要浪费内存,处理能力,电池以及可能的设备使用寿命。


ECMAScript 6版本,使用带有“代码阻塞”的yield的生成器:

因为原来的问题是在七年前发布的,所以我没有用确切的代码来回答问题,因为这太简单了,并且已经得到解答。 这应该有助于解决更复杂的问题,例如,如果您至少需要两次睡眠,或者您计划对异步执行进行排序。 随意修改它以适应您的需求。

let sleeptime = 100
function* clock()
{
    let i = 0
    while( i <= 10000 )
    {
        i++
        console.log(i); // actually, just do stuff you wanna do.
        setTimeout(
            ()=>
            {
                clk.next()
            }
            , sleeptime
        )
        yield
    }
}

let clk = clock()
clk.next()
链接地址: http://www.djcxy.com/p/92155.html

上一篇: delay between actions

下一篇: How to stop and resume thread safely in Java?