ฟังก์ชัน Firestore onUpdate ไม่ทริกเกอร์
ปัญหา
ฉันใช้ฟังก์ชันคลาวด์ของ 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
โปรแกรมจำลองควรเป็นเวอร์ชันล่าสุด
ความคิดใด ๆ ? ขอบคุณ!
คำตอบ
ปรากฎว่าฉันลืมนำเข้าonMusicUpdated
ในไฟล์ฟังก์ชัน index.ts ดังนั้นโปรแกรมจำลองจึงไม่เคยรู้มาก่อนว่ามีอยู่จริง!
เปลี่ยนแล้ว
// functions/src/index.ts
export { onMusicCreated } from './music'
ถึง
// functions/src/index.ts
export { onMusicCreated, onMusicUpdated } from './music'