การจัดการวงจรการใช้งานของฟังก์ชันเพื่อให้แน่ใจว่าจะแก้ปัญหาได้นั้นเป็นสิ่งสำคัญ อย่างเหมาะสม การสิ้นสุดการทำงานอย่างถูกต้องทำให้คุณสามารถหลีกเลี่ยงการเรียกเก็บเงินที่มากเกินไป จากฟังก์ชันที่ทํางานนานเกินไปหรือวนซ้ำไม่สิ้นสุด นอกจากนี้ คุณยังมั่นใจได้ว่า ว่าอินสแตนซ์ Cloud Functions ที่เรียกใช้ฟังก์ชันไม่ปิดการทำงาน ก่อนที่ฟังก์ชันจะเข้าสู่เงื่อนไขหรือสถานะการสิ้นสุด
ใช้วิธีการที่แนะนำต่อไปนี้เพื่อจัดการวงจรของฟังก์ชัน
- จับคู่ฟังก์ชันที่ประมวลผลแบบไม่พร้อมกัน (หรือเรียกอีกอย่างว่า "ฟังก์ชันเบื้องหลัง") โดยการส่งคืน JavaScript สัญญา
- สิ้นสุดฟังก์ชัน HTTP ด้วย
res.redirect()
,res.send()
หรือres.end()
- ยุติฟังก์ชันซิงโครนัสด้วยคำสั่ง
return;
ลดความซับซ้อนของโค้ดแบบอะซิงโครนัสด้วย JavaScript สัญญา
Promises เป็นทางเลือกที่ทันสมัยซึ่งใช้แทน Callback สำหรับโค้ดแบบอะซิงโครนัส สัญญา แสดงถึงการดำเนินการและมูลค่าในอนาคตที่รายการดังกล่าวอาจกลับมา นอกจากนี้ยังช่วยให้คุณ เผยแพร่ข้อผิดพลาดที่คล้ายกับคำสั่งลอง/จับในโค้ดแบบซิงโครนัส คุณสามารถอ่านเกี่ยวกับ ใน Firebase SDK บน Firebase บล็อก, และสัญญาโดยทั่วไปเกี่ยวกับ MDN
วิธีที่สัญญาทำงานร่วมกับฟังก์ชัน
เมื่อคุณคืนค่า JavaScript เป็นฟังก์ชัน ฟังก์ชันนั้น จะยังทำงานต่อไปจนกว่าสัญญาจะได้รับการแก้ไขหรือปฏิเสธ เพื่อระบุว่า ได้ดำเนินการเสร็จเรียบร้อยแล้ว สัญญาควรได้รับการแก้ไข ถึง ระบุว่ามีข้อผิดพลาด ควรปฏิเสธคำสัญญา ซึ่งหมายความว่าคุณเพียงแค่ต้อง จัดการข้อผิดพลาดที่คุณต้องการ
โค้ดต่อไปนี้ใช้ 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 ส่วนใหญ่ของเรา ตัวอย่าง รวมถึงตัวอย่างของการสิ้นสุดฟังก์ชันที่ถูกต้อง นี่เป็นตัวอย่างบางส่วนที่แสดงให้เห็นว่า กรณีทั่วไป:
- ฐานข้อมูลเรียลไทม์ ทริกเกอร์ ฟังก์ชัน HTTP ตามด้วยการเปลี่ยนเส้นทาง
- พื้นที่เก็บข้อมูลระบบคลาวด์
ทริกเกอร์
การดาวน์โหลดพื้นที่เก็บข้อมูลตามด้วย
then
- เว็บฮุคบน Realtime Database
เขียน:
มีข้อผิดพลาดเกิดขึ้นภายในอนุประโยค
then
- ลบเป็นระยะๆ ที่ไม่ได้ใช้ ต่อไปนี้ คำสัญญาที่ถูกปฏิเสธ