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

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

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

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

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

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

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

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

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