การจัดการวงจรของฟังก์ชันเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าฟังก์ชันจะทำงานได้อย่างถูกต้อง การสิ้นสุดฟังก์ชันอย่างถูกต้องจะช่วยหลีกเลี่ยงค่าใช้จ่ายที่มากเกินไป จากฟังก์ชันที่ทำงานนานเกินไปหรือวนซ้ำไม่สิ้นสุด นอกจากนี้ คุณยังตรวจสอบได้ว่าCloud Functionsอินสแตนซ์ที่เรียกใช้ฟังก์ชันจะไม่ปิดตัวลง ก่อนที่ฟังก์ชันจะตรงตามเงื่อนไขหรือสถานะการสิ้นสุด
ใช้แนวทางที่แนะนำต่อไปนี้เพื่อจัดการวงจรของฟังก์ชัน
- แก้ไขฟังก์ชันที่ทําการประมวลผลแบบอะซิงโครนัส (หรือที่เรียกว่า "ฟังก์ชันพื้นหลัง") โดยการส่งคืน สัญญา JavaScript
- สิ้นสุดฟังก์ชัน HTTP ด้วย
res.redirect()
,res.send()
หรือres.end()
- สิ้นสุดฟังก์ชันพร้อมกันด้วยคำสั่ง
return;
ลดความซับซ้อนของโค้ดแบบอะซิงโครนัสด้วย Promise ของ JavaScript
Promise เป็นทางเลือกที่ทันสมัยแทนการเรียกกลับสำหรับโค้ดแบบอะซิงโครนัส Promise แสดงถึงการดำเนินการและค่าในอนาคตที่อาจแสดงผล นอกจากนี้ยังช่วยให้คุณ ส่งต่อข้อผิดพลาดที่คล้ายกับ try/catch ในโค้ดแบบซิงโครนัสได้ด้วย คุณอ่านเกี่ยวกับ Promise ใน Firebase SDK ได้ที่บล็อกของ Firebase และ Promise โดยทั่วไปได้ที่ MDN
วิธีการทำงานของ Promise กับฟังก์ชัน
เมื่อส่งคืน Promise ของ JavaScript ไปยังฟังก์ชัน ฟังก์ชันนั้น จะทำงานต่อไปจนกว่า Promise จะได้รับการแก้ไขหรือถูกปฏิเสธ หากต้องการระบุว่าฟังก์ชันทำงานเสร็จสมบูรณ์แล้ว ควรแก้ปัญหา Promise หากต้องการระบุข้อผิดพลาด ควรปฏิเสธ Promise ซึ่งหมายความว่าคุณจะต้อง จัดการข้อผิดพลาดที่ต้องการเท่านั้น
โค้ดต่อไปนี้จะใช้ Firebase Realtime Database ref
และตั้งค่าเป็น
"world!"
การแสดงผลลัพธ์ของ set
จะรับประกันว่าฟังก์ชันจะ
ทํางานต่อไปจนกว่าการเขียนสตริงลงในฐานข้อมูลแบบไม่พร้อมกัน
จะเสร็จสมบูรณ์
// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
// set() returns a promise. We keep the function alive by returning it.
return event.data.ref.set('world!').then(() => {
console.log('Write succeeded!');
});
});
ตัวอย่างในบริบท
Cloud Functions โค้ด ตัวอย่างส่วนใหญ่ของเรามีตัวอย่างการสิ้นสุดฟังก์ชันอย่างเหมาะสม ตัวอย่างบางส่วนที่แสดงให้เห็นถึงกรณีทั่วไปมีดังนี้
- ทริกเกอร์ Realtime Database: ฟังก์ชัน HTTP ตามด้วยการเปลี่ยนเส้นทาง
- ทริกเกอร์ Cloud Storage:
การดาวน์โหลดพื้นที่เก็บข้อมูลตามด้วย
then
- Webhook ใน Realtime Database
write:
ข้อผิดพลาดที่เกิดขึ้นภายในคําสั่ง
then
- ลบบัญชีที่ไม่ได้ใช้เป็นระยะๆ: คำสัญญาที่ถูกปฏิเสธ