了解如何讓你的 JavaScript 函數暫停執行一段時間
有時候你希望你的函數暫停執行一定的秒數或毫秒數。
在 C 或 PHP 這樣的編程語言中,你可以呼叫 sleep(2)
來使程式停止執行 2 秒。Java 使用 Thread.sleep(2000)
,Python 使用 time.sleep(2)
,Go 使用 time.Sleep(2 * time.Second)
。
JavaScript 沒有原生的 sleep 函數,但由於 promises 的引入(以及 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(() => {
//執行其他操作
})
或者在 async 函數中使用它:
const doSomething = async () => {
await sleep(2000)
//執行其他操作
}
doSomething()
請記住,由於 JavaScript 的工作方式(詳細了解 事件迴圈),這並不像在其他語言中可能發生的那樣,暫停整個程式的執行,而只是使你的函數休眠。
你可以將相同的概念應用到迴圈中:
const list = [1, 2, 3, 4]
const doSomething = async () => {
for (const item of list) {
await sleep(2000)
console.log('🦄')
}
}
doSomething()