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