Cách đặt các hàm JavaScript của bạn ở chế độ ngủ

Tìm hiểu cách đặt hàm của bạn ở chế độ ngủ trong một khoảng thời gian nhất định trong JavaScript

Đôi khi bạn muốn hàm của mình tạm dừng thực thi trong một khoảng thời gian cố định là vài giây hoặc mili giây.

Trong một ngôn ngữ lập trình như C hoặc PHP, bạn sẽ gọisleep(2)để làm cho chương trình tạm dừng trong 2 giây. Java cóThread.sleep(2000), Python cótime.sleep(2), Đi cótime.Sleep(2 * time.Second).

JavaScript không có chức năng ngủ nguyên bản, nhưng nhờ sự ra đời của các hứa hẹn (và async / await trong ES2018), chúng tôi có thể triển khai tính năng này theo cách rất hay và dễ đọc, để làm cho các chức năng của bạn ở chế độ ngủ:

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

hoặc, trong Node.js, đơn giản hơn:

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

Xem thêm trênquảng cáo

Bây giờ bạn có thể sử dụng điều này vớithengọi lại:

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

Hoặc sử dụng nó trong một chức năng không đồng bộ:

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

doSomething()

Hãy nhớ rằng do cách hoạt động của JavaScript (đọc thêm vềvòng lặp sự kiện), điều này không tạm dừng toàn bộ quá trình thực thi chương trình giống như nó có thể xảy ra trong các ngôn ngữ khác, mà thay vào đó, chỉ hàm của bạn ở chế độ ngủ.

Bạn có thể áp dụng khái niệm tương tự cho một vòng lặp:

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

doSomething()

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: