首页 > 试题广场 >

如何实现sleep的效果(es5或者es6)

[问答题]

如何实现sleep的效果(es5或者es6)

大致总结一下sleep的作用:让一个线程挂起一段时间,这段时间内,CPU的控制权将不会分配给该线程,直到时间结束,该线程再次参与优先级的判定,根据优先级再依次获取CPU的控制权。

// 1. while循环
function sleep(ms){
    var start = Date.now(),
        expire = start+ms;
    while( Date.now()<expire );
    console.log('sleep结束...');
    return;
}

// 2. Promise
function sleep(ms){
    var temple = new Promise(
        (resolve)=>{
            setTimeout(resolve,ms);
        }
    );
    return temple;
}
sleep(2000).then(function(){
    console.log('sleep结束...');
})

// 3. async
function sleep(ms){
    return new Promise((resolve)=>setTimeout(resolve,ms));
}
async function test(){
    var temple = await sleep(1000);
    console.log('sleep结束...');
    return temple;
}
test();

sleep的作用就和setTimeout很相似,但是在时间结束后,并不会存在一个评定优先级的过程,但大多数用js实现sleep的方法,好像也就仅仅只是模拟了一个添加了异步的setTimeout,如果说“仅此而已”,那我们为什么不直接去使用sleep?
编辑于 2022-02-15 17:43:19 回复(0)
后面的promise异步函数方式虽然可以实现,但是需要调用then的方式来sleep
发表于 2021-04-14 23:01:37 回复(0)
function sleep(ms){ return new Promise((resolve)=>setTimeout(resolve,ms)); } async function test(){ var temple=await sleep(1000); console.log(1111) return temple } test();
发表于 2020-03-12 14:20:08 回复(0)