为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript中的睡眠-动作之间的延迟

/ 猿问

JavaScript中的睡眠-动作之间的延迟

狐的传说 2019-06-17 17:39:41

JavaScript中的睡眠-动作之间的延迟

在JavaScript执行另一个操作之前,有什么方法可以让我在JavaScript中睡觉吗?

例子:

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


查看完整描述

3 回答

?
大话西游666

你可以用setTimeout为了达到类似的效果:

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

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


查看完整回答
反对 回复 2019-06-17
?
MMMHUHU

万一你真的需要sleep()只是为了测试一些东西。但是请注意,在调试过程中,它大多数情况下都会使浏览器崩溃-这可能就是您需要它的原因。在生产模式中,我将注释掉这个函数。

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

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


查看完整回答
反对 回复 2019-06-17
?
尚方宝剑之说

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


因为最初的问题是七年前发布的,所以我没有费心回答确切的代码,因为它太简单了,而且已经回答了。这将有助于解决更复杂的问题,例如,如果您至少需要两次睡眠,或者您计划对异步执行进行排序。请随意修改它以满足您的需要。


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()

职能*

()=>箭头函数

您还可以通过承诺:

function sleep(ms)

{

    return(

        new Promise(function(resolve, reject)

        {

            setTimeout(function() { resolve(); }, ms);

        })

    );

}



sleep(1000).then(function()

{

    console.log('1')

    sleep(1000).then(function()

    {

        console.log('2')

    })

})

或者简单得多,也不那么花哨。


function sleep(ms, f)

{

    return(

        setTimeout(f, ms)

    )

}



sleep(500, function()

{

    console.log('1')

    sleep(500, function()

    {

        console.log('2')

    })

})

console.log('Event chain launched')

如果你只是在等待某种情况的发生,你可以这样等待


function waitTill(condition, thenDo)

{

    if (eval(condition))

    {

        thenDo()

        return

    }


    setTimeout(

        ()    =>

        {

            waitTill(condition, thenDo)

        }

        ,

        1

    )

}


x=0


waitTill(

    'x>2 || x==1'

    ,

    ()    =>

    {

        console.log("Conditions met!")

    }

)


// Simulating the change

setTimeout(

    () =>

    {

        x = 1

    }

    ,

    1000

)


查看完整回答
反对 回复 2019-06-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信