𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗣𝗿𝗼𝗺𝗶𝘀𝗲𝘀
Promise คือสิ่งที่แสดงถึงผลลัพธ์ของงานแบบ asynchronous
คุณใช้ Promise สำหรับการเรียก API, การคิวรีฐานข้อมูล (database queries) และการอ่านไฟล์
Promise มี 3 สถานะ:
- Pending: งานกำลังดำเนินการอยู่
- Fulfilled: งานเสร็จสิ้นอย่างสำเร็จ
- Rejected: งานล้มเหลวเนื่องจากเกิดข้อผิดพลาด
โครงสร้างมีลักษณะดังนี้:
const promise = new Promise((resolve, reject) => { // The executor runs immediately });
คุณจัดการกับผลลัพธ์ด้วย method เหล่านี้:
- .then(): ทำงานเมื่อ promise สำเร็จ
- .catch(): ทำงานเมื่อ promise ล้มเหลว
- .finally(): ทำงานเมื่อจบงาน ไม่ว่าผลลัพธ์จะเป็นอย่างไรก็ตาม
กฎสำคัญที่ควรจำ:
- ผลลัพธ์แรกจะเป็นผู้ชนะ หากคุณเรียก resolve() แล้วตามด้วย reject() ตัว resolve จะเป็นผู้ชนะ
- ฟังก์ชัน executor จะทำงานแบบ synchronous
- การใช้ async และ await ช่วยให้โค้ดของคุณอ่านง่ายกว่าการใช้ .then()
การจัดการกับหลาย promise:
- Promise.all(): ใช้แนวทางแบบ fail-fast หากมี promise ใดตัวหนึ่งล้มเหลว ทั้งกลุ่มจะล้มเหลวทันที
- Promise.allSettled(): จะรอให้ทุก promise ทำงานจนเสร็จสิ้น โดยจะคืนค่าผลลัพธ์กลับมาแม้ว่าบางงานจะล้มเหลวก็ตาม
สรุป:
- Promise: ตัวจัดการผลลัพธ์แบบ asynchronous
- resolve: ระบุว่าสำเร็จ
- reject: ระบุว่าล้มเหลว
- async/await: วิธีการเขียน promise ที่สะอาดตาและอ่านง่ายกว่า
- Promise.all: หยุดทำงานทันทีเมื่อเจอข้อผิดพลาดแรก
- Promise.allSettled: ทำงานจนครบทุกงาน
