ฟังก์ชัน Firestore onUpdate ไม่ทริกเกอร์

Jan 02 2021

ปัญหา

ฉันใช้ฟังก์ชันคลาวด์ของ Firebase กับโปรแกรมจำลองและด้วยเหตุผลบางประการonUpdateทริกเกอร์ไม่ได้ทริกเกอร์ แต่onCreateฟังก์ชันจะทริกเกอร์

รหัสทั้งหมดเป็น TypeScript และส่งไปยัง JS เพื่อทำงานบนฟังก์ชันคลาวด์

// functions/src/music.ts

// this function runs
export const onMusicCreated = functions.firestore
    .document('music/{musicId}')
    .onCreate(async (snapshot) => {
        console.log('on create is running')
    })

// this function doesn't run
export const onMusicUpdated = functions.firestore
    .document('music/{musicId}')
    .onUpdate(async (change) => {
        console.log('on update is running')
    })

ฟังก์ชั่นทั้งสองไม่ตรงกันเนื่องจากในรหัสสุดท้าย

ในส่วนหน้าเมื่อฉันเรียกใช้addฟังก์ชันที่ส่วนหน้าonCreateฟังก์ชันจะเริ่มทำงาน

const { id } = await firebase.firestore().collection('music').add({ title: 'hello world' })

บันทึกของคอนโซลจะทำงานตามที่คาดไว้และโปรแกรมจำลองจะส่งออกสิ่งนี้ไปยังคอนโซล:

i  functions: Beginning execution of "onMusicCreated"
i  functions: Finished "onMusicCreated" in ~1s

แต่เมื่อฉันอัปเดตเอกสารฉบับเดียวกันonUpdateฟังก์ชันนี้จะไม่ทำงาน

// "id" is the same id as above
await firebase.firestore().doc(`music/${id}`).update({ title: 'new title' })

ไม่มีอะไรเกิดขึ้น. ฉันสามารถยืนยันได้ว่าเอกสารได้รับการอัปเดตจริงเมื่อฉันดูในโปรแกรมจำลอง firestore ฉันขาดอะไรบางอย่างที่ชัดเจนหรือไม่? โค้ดส่วนหน้าถูกทำให้ง่ายขึ้นเมื่อเทียบกับการใช้งานจริงของฉัน แต่โค้ดฟังก์ชันไม่ได้ทำให้ง่ายขึ้นเลย และฉันสามารถยืนยันได้ว่าเอกสาร firestore ถูกสร้างและอัปเดตตามที่ฉันคาดหวัง

ไม่มีข้อความแสดงข้อผิดพลาดในคอนโซลหรือบันทึก

ขั้นตอนการแก้ไขข้อบกพร่อง

  • ฉันได้ตรวจสอบเพื่อให้แน่ใจว่ารหัสฟังก์ชันถูกส่งไปยัง JS อย่างถูกต้อง ฉันมองไปที่เอาต์พุตโค้ดไม่ดีรวมทั้งอัปเดตโค้ด onCreate หลายครั้งเพื่อให้แน่ใจว่าฟังก์ชันนั้นได้รับการอัปเดต
  • ฉันเจาะโค้ดทั้งหมดภายในฟังก์ชัน (ดังที่แสดงด้านบน) ดังนั้นฉันจึงสามารถยืนยันได้ว่าฟังก์ชันนั้นไม่ได้ทำงานอยู่
  • ฟังก์ชัน onUpdate ในทางเทคนิคยอมรับสองพารามิเตอร์ ผลลัพธ์เดียวกันกับทั้งสองพารามิเตอร์
  • ฉันไม่ได้ลองใช้ฟังก์ชั่นในการผลิต แต่เฉพาะกับโปรแกรมจำลองเท่านั้น

กระทู้ที่เกี่ยวข้อง

เหตุใด firestore onWrite จึงไม่ถูกเรียกใช้บนโปรแกรมจำลองฟังก์ชันคลาวด์ของ firebase

ฉันไม่ได้ใช้อักขระต้องห้ามใด ๆ ในตัวเลือกเอกสารหรืออย่างน้อยฉันก็ไม่ได้รับข้อความแสดงข้อผิดพลาดนั้น

Firebase Cloud Functions สำหรับ Firestore ไม่ทริกเกอร์

การใช้ฟังก์ชัน 3.11.0 และฟังก์ชันเป็นแบบ async ดังนั้นจึงควรส่งคืน Promise โดยปริยาย ผลลัพธ์จะเหมือนกันเมื่อส่งคืนค่าอย่างชัดเจน (เช่นreturn 0)

https://firebase.google.com/docs/functions/firestore-events#trigger_a_function_when_a_document_is_updated

นั่นคือเอกสารอย่างเป็นทางการ เท่าที่ฉันบอกได้ฉันกำลังทำตามที่เอกสารบอก ฉันอาจจะพลาดอะไรบางอย่างไปอย่างชัดเจน

รายละเอียดอื่น ๆ

  • macOS บิ๊ก Sur 11.1 (20C69)
  • Firebase CLI 9.1.0

โปรแกรมจำลองควรเป็นเวอร์ชันล่าสุด

ความคิดใด ๆ ? ขอบคุณ!

คำตอบ

Nick Jan 04 2021 at 03:15

ปรากฎว่าฉันลืมนำเข้าonMusicUpdatedในไฟล์ฟังก์ชัน index.ts ดังนั้นโปรแกรมจำลองจึงไม่เคยรู้มาก่อนว่ามีอยู่จริง!

เปลี่ยนแล้ว

// functions/src/index.ts

export { onMusicCreated } from './music'

ถึง

// functions/src/index.ts

export { onMusicCreated, onMusicUpdated } from './music'