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