Promise.try พร้อมใช้งานใน Baseline เวอร์ชันใหม่แล้ว

Jeremy Wagner
Jeremy Wagner

เผยแพร่เมื่อวันที่ 17 มกราคม 2025

การทำงานแบบไม่พร้อมกันบนเว็บอาจเป็นเรื่องยาก และงานจำนวนมากบนเว็บเกี่ยวข้องกับการทำงานแบบไม่พร้อมกัน ไม่ว่าจะเกี่ยวข้องกับการเรียกใช้ fetch หรือการดําเนินการแบบไม่พร้อมกันอื่นๆ เบราว์เซอร์จะช่วยให้คุณทํางานได้ง่ายขึ้นเมื่อเมธอดในตัวมีการจัดการข้อผิดพลาดที่มีประสิทธิภาพ ข้อมูลนี้ระบุไว้แล้วสำหรับ Promise โดยใช้เมธอด then, catch และ finally

อย่างไรก็ตาม สถาปัตยกรรมโค้ดเบสของแอปพลิเคชันควรมีความยืดหยุ่น และไม่จำเป็นต้องทำทุกอย่างในแอปพลิเคชันแบบไม่พร้อมกัน บางครั้งคุณอาจต้องจัดการผลลัพธ์ของคอลแบ็กในลักษณะที่ง่ายขึ้นในกรณีที่ไม่สนใจว่าคอลแบ็กที่คุณส่งไปยัง Promise จะเป็นแบบซิงค์หรือไม่ Promise.try เป็นเมธอดที่ใช้ได้ในเครื่องมือเบราว์เซอร์หลักๆ ทั้งหมด ซึ่งช่วยให้นักพัฒนาแอปดำเนินการได้ง่ายขึ้น จึงถือเป็น Baseline ใหม่

Promise.try คืออะไรและทำงานอย่างไร

Promise.try เป็นเมธอดที่สะดวกซึ่งทำให้การจัดการข้อผิดพลาดสำหรับฟังก์ชัน Callback แบบซิงค์ง่ายขึ้นกว่าการใช้ Promise.resolve

// If the callback is synchronous and it throws
// an exception, the error won't be caught here:
new Promise(resolve => resolve(callback());

// But it will be here:
Promise.try(callback);

จากนั้นใช้วิธีการ then, catch และ finally เพื่อจัดการการแก้ไขหรือการปฏิเสธ Promise

Promise.try(callback)
  .then(result => console.log(result))
  .catch(error => console.log(error))
  .finally(() => console.log("All settled."));

จะเกิดอะไรขึ้นหากฟังก์ชันการเรียกกลับมีอาร์กิวเมนต์ คุณจัดการปัญหานี้ได้ 2 วิธี ดังนี้

// This creates an extra closure, but works:
Promise.try(() => callback(param1, param2));

// This doesn't create an extra closure, and still works:
Promise.try(callback, param1, param2);

ประโยชน์หลักของการใช้ Promise.try คือช่วยให้คุณใช้ Promise ได้อย่างสอดคล้องกัน ไม่ว่าคุณจะส่งการเรียกคืนแบบซิงโครนัสหรือแบบอะซิงโครนัสก็ตาม ซึ่งหมายความว่าในกรณีที่ฟังก์ชันยูทิลิตีส่งการเรียกกลับไปยัง Promise ที่ใช้กันอย่างแพร่หลายในโค้ดของคุณ การใช้ Promise.try จะช่วยให้การจัดการข้อผิดพลาดของการเรียกกลับที่คุณส่งไปยัง Promise เป็นไปอย่างเหมาะสม หากต้องการข้อมูลเพิ่มเติม ข้อกังวลอื่นๆ ที่อาจเกิดขึ้น หรือกรณีการใช้งาน โปรดดูเอกสารประกอบ MDN สําหรับ Promise.try

บทสรุป

ตอนนี้ Promise.try อยู่ในสถานะ "พร้อมใช้งานเป็นเวอร์ชันพื้นฐาน" แล้ว คุณจึงควรใช้ Promise.try ในเครื่องมือเบราว์เซอร์หลักๆ ทั้งหมดได้ เมื่อเวลาผ่านไป คุณควรจะสามารถใช้ Promise.try ในเว็บแอปพลิเคชันได้อย่างมั่นใจมากขึ้นว่าจะเป็นแพลตฟอร์มเว็บที่ทำงานร่วมกันได้อย่างเสถียร