Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

ใช้แนวทางที่แนะนำเหล่านี้เพื่อจัดการวงจรชีวิตของฟังก์ชันของคุณ:

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

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

คำสัญญาเป็นทางเลือกที่ทันสมัยสำหรับการโทรกลับสำหรับโค้ดแบบอะซิงโครนัส สัญญาแสดงถึงการดำเนินการและมูลค่าในอนาคตที่อาจส่งคืน นอกจากนี้ยังช่วยให้คุณเผยแพร่ข้อผิดพลาดที่คล้ายกับการลอง/จับในโค้ดแบบซิงโครนัส คุณสามารถอ่านเกี่ยวกับสัญญาใน Firebase SDK บน Firebase บล็อก และสัญญาทั่วไปใน MDN

คำสัญญาทำงานอย่างไรกับฟังก์ชัน

เมื่อคุณส่งคืนคำสัญญา JavaScript ไปยังฟังก์ชัน ฟังก์ชันนั้นจะยังคงทำงานต่อไปจนกว่าสัญญาจะได้รับการแก้ไขหรือปฏิเสธ เพื่อระบุว่าฟังก์ชันทำงานเสร็จเรียบร้อยแล้ว สัญญาควรได้รับการแก้ไข เพื่อบ่งชี้ข้อผิดพลาด ควรปฏิเสธคำสัญญา ซึ่งหมายความว่าคุณจะต้องจัดการกับข้อผิดพลาดที่คุณต้องการเท่านั้น

รหัสต่อไปนี้จะเป็นฐานข้อมูลเรียลไทม์ Firebase ref และตั้งค่าเป็น "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!');
  });
});

ตัวอย่างในบริบท

ส่วนใหญ่มีเมฆฟังก์ชั่นของเรา ตัวอย่างโค้ด รวมถึงตัวอย่างของการสิ้นสุดการทำงานที่เหมาะสม ต่อไปนี้คือตัวอย่างบางส่วนที่แสดงให้เห็นกรณีทั่วไป: