请求的行为:
我想在打字稿中创建一个云函数,每当将文档添加到帖子集合的注释子集合时,该函数就会执行。
执行应将父文档上的计数器增加一个。
当前状态
如果我用console.log()语句替换“获取承诺”,则每次创建文档时都会执行云功能。
问题
它不执行更新部分。相反,它将引发错误:
Object is possibly 'undefined'
解决方法
我在不同的云函数中遇到了类似的问题,并使用了if语句来解决它。但是,我不知道如何在这里应用它。
如何解决此问题?我必须使用if语句吗?
export const createSubCollTrigger =
functions.firestore.document('posts/{postID}/comments/{commentID}').onCreate((snap, context) => {
admin.firestore().doc('posts/{postID}').get()
.then(snapshot => {
const data = snapshot.data()
return admin.firestore().doc('posts/{postID}').update({postCommentsTot: data.postCommentsTot + 1});
})
.catch(error => {
console.log(error)
return
})
})
**
答案 0 :(得分:1)
该错误告诉您该错误位于第38行。由于您没有说明是哪一行,因此我猜测它位于这一行:
const data = snapshot.data()
根据API docs,data()返回DocumentData or undefined
,其中undefined
表示未找到文档。在TypeScript中,这意味着您的代码需要表明它已准备好处理undefined
才能访问返回对象的属性。你不是在这里如您所建议,您需要使用条件来确定文档是否存在:
const data = snapshot.data()
if (data) {
return admin.firestore().doc('posts/{postID}').update({postCommentsTot: data.postCommentsTot + 1});
}
else {
return null
}
或类似的东西。