Облачные функции Firestore Счетчик комментариев: Как исправить «Объект, возможно, не определен»? - PullRequest
0 голосов
/ 13 марта 2019

Запрошенное поведение:
Я хотел бы создать облачную функцию в машинописном тексте, которая будет выполняться каждый раз, когда документ добавляется в подколлекцию комментариев коллекции публикаций. Выполнение должно увеличить счетчик родительского документа на единицу.

Текущее состояние
Облачная функция выполняется каждый раз, когда я создаю документ, если я заменяю «получить обещание» на оператор 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 Ответ

1 голос
/ 13 марта 2019

Ошибка говорит вам, что ошибка в строке 38. Поскольку вы не сказали, какая это строка, я собираюсь догадаться, что она в этой строке:

    const data = snapshot.data()

Согласно API документы , 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
}

или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...