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