首页 > 试题广场 >

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

[问答题]
如何实现sleep的效果(es5或者es6)
   在多线程编程的情况下,sleep使线程进入休眠状态,有三种方式实现sleep的效果:(1)通过promise function sleep(ms){
  var temple=new Promise(
  (resolve)=>{
  console.log(111);setTimeout(resolve,ms)
  });
  return temple
}
sleep(500).then(function(){
   //console.log(222)
});

(2)使用异步(async)
function sleep(ms){
  return new Promise((resolve)=>setTimeout(resolve,ms));
}
async function test(){
  var temple=await sleep(1000);
  console.log(1111)
  return temple
}
test();

(3)通过generate
function* sleep(ms){
   yield new Promise(function(resolve,reject){
             console.log(111);
             setTimeout(resolve,ms);
        })  
}
sleep(500).next().value.then(function(){console.log(2222)});

不适用settimeout的原因使sleep实现的使同步进程的挂起,而settimeout是异步的。

发表于 2018-12-22 16:01:34 回复(1)
延时器
发表于 2019-05-16 22:56:21 回复(0)
每一次延时是一个Promise,指定时间后resolve,而resolve的回调就将Generator的指针移到下一个yield语句处。
发表于 2019-01-17 22:55:45 回复(0)