学习如何在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()