Promised-Based Timer Functions ใน Node.js 15-16
Nuttavut Thongjor
Node.js

เรียนรู้การใช้งาน toLocaleDateString เพื่อแปลงออบเจ็กต์ของ date เป็นข้อความวันที่ภาษาไทย

คำอธิบาย
ความคิดเห็น

ก่อนหน้านี้หากเราต้องการรอการทำงานช่วงเวลาหนึ่งถึงค่อยทำงานถัดไป เช่น หน่วงเวลาไว้ 1 วินาทีก่อนค่อยเริ่มทำงานอื่น เราอาจใช้ Promise ควบคู่กับ setTimeout เพื่อแก้ปัญหาดังกล่าวได้ดังนี้

JavaScript
1await new Promise((resolve) => {
2 setTimeout(resolve, 1_000)
3})
4
5// ครบ 1 วินาที ค่อยทำอย่างอื่น

สำหรับ Node.js เวอร์ชัน 15 เป็นต้นไปได้เพิ่ม Timers Promises API ที่ช่วยให้ฟังก์ชันเวลาต่าง ๆ คืน Promise เราจึงสามารถใช้ async/await เข้าช่วยเพื่อเขียนโค้ดให้สั้นลงได้ ดังนี้

JavaScript
1import { setTimeout } from 'timers/promises'
2
3await setTimeout(1_000)

สำหรับ setTimeout สามารถส่งค่าเมื่อ Promise อยู่ในสถานะ fulfilled ได้ด้วยการระบุค่านั้นในอาร์กิวเมนต์ตัวที่สอง

JavaScript
1import { setTimeout } from 'timers/promises'
2
3const value = await setTimeout(1_000, 'Fulfilled')
4console.log(value) // Fulfilled

ความพิเศษของ setTimeout ในเวอร์ชันของ Timers Promises API คือสามารถถูกยกเลิกการทำงานได้ผ่าน signal

JavaScript
1import { setTimeout } from 'timers/promises'
2
3const controller = new AbortController()
4await setTimeout(5_000, 'Fulfilled', { signal: controller.signal })

ศึกษาการใช้งาน signal และ AbortController ได้จากบทความ ยกเลิกการ Fetch อย่างไร? รู้จัก AbortSignal และ AbortController

แพคเกจ timers/promises ยังมีฟังก์ชันเวลาอื่น ๆ ได้แก่ setImmediate และ setInterval (เพิ่มมาในเวอร์ชัน 15.9.0) อีกด้วย

JavaScript
1import { setTimeout, setImmediate, setInterval } from 'timers/promises'