typescript - Firebase Cloud Functions วัตถุอาจเป็น 'undefined'
ฉันมีโค้ดต่อไปนี้ใน TypeScript และฉันได้รับข้อผิดพลาดนี้ในบรรทัด: change.after.data();, วัตถุอาจเป็น 'undefined':
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()
export const onEditModeUpdate =
functions.firestore.document("Settings/ShiftsEditMode").onUpdate(change=> {
const after = change.after.data();
const payload = {
data: {
temp: String(after.temp),
conditions: after.conditions
}
}
return admin.messaging().sendToTopic("Settings/ShiftsEditMode", payload)
})
สิ่งที่ฉันต้องการทำคือส่งการแจ้งเตือนไปยังแอปของฉันทุกครั้งที่มีอะไรบางอย่างใน Firestore เปลี่ยนแปลง ฉันได้ทำตามเอกสารอย่างเป็นทางการแล้ว แต่ฉันได้รับข้อผิดพลาด ฉันคิดว่านี่เกี่ยวข้องกับเวอร์ชันของ Node.js ใครช่วยได้บ้าง กรุณา?
คำตอบ #1
พารามิเตอร์ change ของคุณเป็นประเภท Change หากคุณคลิกดูใน VSCode คุณจะเห็นการกำหนดนิยามของมันที่นี่:
export declare class Change<T> {
before?: T;
after?: T;
constructor(before?: T, after?: T);
}
สังเกตว่าคุณสมบัติ before และ after ของมันทั้งคู่เป็นค่าที่ไม่จำเป็น โดยมีเครื่องหมาย ? ในประเภท ซึ่งหมายความว่าเป็นไปได้ว่าค่าจะไม่ถูกกำหนด
มีความเป็นไปได้ว่าการตั้งค่า TypeScript ของคุณใน tsconfig.json มีบรรทัดสำหรับ "strict": true ซึ่งบอก TypeScript ว่าไม่ต้องเตือนคุณเมื่อคุณพยายามเข้าถึงคุณสมบัติที่อาจเป็น undefined โดยไม่ได้ตรวจสอบอย่างชัดเจนก่อน นั่นคือข้อผิดพลาดที่คุณเห็นที่นี่
คุณมีตัวเลือกสองอย่าง:
1) ลบบรรทัดนั้นออกจากไฟล์ tsconfig.json ของคุณ
2) หรือเช็คก่อนว่ามันถูกกำหนดหรือยัง
if (change.after) {
const after = change.after.data();
const payload = {
data: {
temp: String(after.temp),
conditions: after.conditions
}
}
return admin.messaging().sendToTopic("Settings/ShiftsEditMode", payload)
}
else {
return null;
}
คำตอบ #2
ถ้าคุณดูที่ประเภทของตัวจัดการ onUpdate อาร์กิวเมนต์สำหรับ change จะมีคุณสมบัติทางเลือก 2 อย่าง คือ after และ before:
class Change<T> {
before?: T;
after?: T;
constructor(before?: T, after?: T);
}
เพราะคุณต้องการเข้าถึง after คุณจะต้องห่อมันด้วยเงื่อนไขบางอย่าง เหมือนกับตัวอย่างต่อไปนี้:
functions.firestore.document("Settings/ShiftsEditMode").onUpdate(change=> {
if (change.after) {
const after = change.after.data();
...
}
}
