如何在JavaScript中让函数休眠一定的时间

277 阅读1分钟

学习如何在JavaScript中让你的函数休眠一定的时间

有时你想让你的函数暂停执行一定数量的秒或毫秒。

在C或PHP这样的编程语言中,你会调用sleep(2) ,让程序停顿2秒。Java有Thread.sleep(2000), Python有time.sleep(2), Go有time.Sleep(2 * time.Second)

JavaScript没有原生的睡眠函数,但由于引入了承诺(以及ES2018中的async/await),我们可以用一种非常好的、可读的方式实现这样的功能,让你的函数睡眠。

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

或者,在Node.js中,更简单。

const { promisify } = require('util')
const sleep = promisify(setTimeout)

查看更多关于promisify的信息

现在你可以用then 回调来使用这个功能。

sleep(500).then(() => {
  //do stuff
})

或者在一个异步函数中使用它。

const doSomething = async () => {
  await sleep(2000)
  //do stuff
}

doSomething()

请记住,由于JavaScript的工作方式(阅读更多关于事件循环的内容),这不会像其他语言中可能发生的那样暂停整个程序的执行,而是只有你的函数在睡眠。

你可以将同样的概念应用于一个循环。

const list = [1, 2, 3, 4]
const doSomething = async () => {
  for (const item of list) {
    await sleep(2000)
    console.log('🦄')    
  }
}

doSomething()