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

การจัดการวงจรฟังก์ชันเป็นสิ่งสำคัญต่อการตรวจสอบว่าฟังก์ชันแก้ไขได้อย่างถูกต้อง การสิ้นสุดฟังก์ชันอย่างถูกต้องจะช่วยให้คุณหลีกเลี่ยงการเรียกเก็บเงินมากเกินไปจากฟังก์ชันที่ทำงานเป็นเวลานานเกินไปหรือเล่นวนซ้ำไปเรื่อยๆ ได้ นอกจากนี้ คุณยังตรวจสอบว่าอินสแตนซ์ Cloud Functions ที่เรียกใช้ฟังก์ชันไม่ได้ปิดการทำงานก่อนที่ฟังก์ชันจะถึงเงื่อนไขหรือสถานะการสิ้นสุดได้สำเร็จ

ใช้วิธีการที่แนะนำต่อไปนี้เพื่อจัดการวงจรฟังก์ชัน

  • แก้ไขฟังก์ชันที่ประมวลผลอะซิงโครนัส (หรือที่เรียกว่า "ฟังก์ชันเบื้องหลัง") โดยการส่งคืนคำสัญญา JavaScript
  • สิ้นสุดฟังก์ชัน HTTP ด้วย res.redirect(), res.send() หรือ res.end()
  • ยุติฟังก์ชันซิงโครนัสด้วยคำสั่ง return;

ลดความซับซ้อนของโค้ดแบบอะซิงโครนัสด้วยคำสัญญา JavaScript

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