Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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