ซิงค์ ไม่พร้อมกัน และสัญญา

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