了解如何讓你的 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()