ซิงค์ อะซิงโครนัส และสัญญา

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