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

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 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

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

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


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

TA贡献1788条经验 获得超4个赞

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
  • 3 回答
  • 0 关注
  • 666 浏览
慕课专栏
更多

添加回答

举报

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