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