Firestore云功能评论计数器:如何修复“对象可能未定义”?

时间:2019-03-13 10:56:23

标签: javascript typescript firebase google-cloud-firestore google-cloud-functions

请求的行为
我想在打字稿中创建一个云函数,每当将文档添加到帖子集合的注释子集合时,该函数就会执行。 执行应将父文档上的计数器增加一个。

当前状态
如果我用console.log()语句替换“获取承诺”,则每次创建文档时都会执行云功能。

问题
它不执行更新部分。相反,它将引发错误: Object is possibly 'undefined'

解决方法
我在不同的云函数中遇到了类似的问题,并使用了if语句来解决它。但是,我不知道如何在这里应用它。

  

如何解决此问题?我必须使用if语句吗?

我的云功能
enter image description here 要复制的代码

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
    })
})

**

1 个答案:

答案 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
}

或类似的东西。