实现 sleep 函数

sleep() 函数的作用是让一段程序进入不活跃状态并持续一段时间,很多编程语言都有自己的 sleep 方法,但 JavaScript 没有。

最接近的是 setTimeout,它在指定的一段时间后执行回调内的某些操作:

const printNums = () => {
  console.log(1)
  setTimeout(() => console.log(2), 500)
  console.log(3)
}

printNums()
// 1
// 3
// 2

但你也可能也注意到了,它执行的顺序跟实际 sleep 不符合。

同步版本

使用 new Date().getTime() 可以在 while 循环中用于暂停执行一段时间。

const sleepSync = (ms) => {
  const end = new Date().getTime() + ms
  while (new Date().getTime() < end) {
    /* do nothing */
  }
}

const printNums = () => {
  console.log(1)
  sleepSync(1000)
  console.log(2)
  console.log(3)
}

printNums()

异步版本

ES6 新增的 Promise API 和 ES7 的 async/await 可以方便我们实现的 sleep 方法:

const sleep = ms => new Promise(r => setTimeout(r, ms))

async function demo() {
  for (let i = 0; i < 5; i++) {
    console.log(`Waiting ${i} seconds...`)
    await sleep(i * 1000)
    console.log('1')
  }
  console.log('Done')
}

demo()

注意:

  • sleep 返回的函数必须在异步函数中执行,并且必须使用 await 调用。
  • await 仅暂停当前异步函数。这意味着它不会阻止脚本其余部分的执行,这在绝大多数情况下都是您想要的。

更多资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值