0
点赞
收藏
分享

微信扫一扫

实现Sleep函数的四种方法

悬灸人雪洋 2022-03-11 阅读 81

方式一:使用Promise + then

// 使用Promise实现sleep

const sleep = time => {
  return new Promise(resolve => {
    setTimeout(resolve,time)
  })
}

var start = new Date().getTime();
sleep(2000).then(() => {
  console.log(1);
  var end = new Date().getTime();       
  console.log(end-start+'ms');  // 2004ms
})

方式二:使用生成器函数 + then

function* sleep(time) {
  yield new Promise(resolve => {
    setTimeout(resolve, time)
  })
}

var start = new Date().getTime();
sleep(2000).next().value.then(() => {
  console.log(1);
  var end = new Date().getTime();
  console.log(end - start + 'ms');  // 2003ms
})

方式三:使用async + await

function sleep(time) {
  return new Promise(resolve => {
    setTimeout(resolve, time)
  })
}

var start = new Date().getTime();
async function output() {
  await sleep(2000);
  var end = new Date().getTime();
  console.log(end - start + 'ms');  // 2002ms
}
output()

方式四:直接通过setTimeout实现

function sleep(callback,time) {
  setTimeout(callback,time);
}
const start = new Date().getTime();

function output() {
  console.log(111);
  const end = new Date().getTime();
  console.log(`${end - start} ms`); // 2006 ms
}

sleep(output,2000)

RQ:为什么定时器执行后存在时间误差?

举报

相关推荐

0 条评论