สิ่งสำคัญคือต้องจัดการวงจรชีวิตของฟังก์ชันเพื่อให้แน่ใจว่าแก้ไขได้อย่างถูกต้อง คุณสามารถหลีกเลี่ยงการชาร์จมากเกินไปจากฟังก์ชันที่ทำงานนานเกินไปหรือวนซ้ำได้โดยการยุติฟังก์ชันอย่างถูกต้อง นอกจากนี้ คุณสามารถตรวจสอบให้แน่ใจว่าอินสแตนซ์ของ 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 บนฐานข้อมูลเรียลไทม์เขียน : เกิดข้อผิดพลาดภายในส่วนคำสั่ง
then
- ลบบัญชีที่ไม่ได้ใช้เป็นระยะ : สัญญาที่ถูกปฏิเสธ