Почему я всегда получаю NaN при добавлении нового поля после запуска onCreate новый документ в подколлекции в Firestore? - PullRequest
0 голосов
/ 02 сентября 2018

Я хочу добавить новое поле в пользовательских данных (под именем: "joko"), используя onCreate облачную функцию для пожарного магазина, запускаемую после создания нового события в подсборке createdEvents

перед добавлением нового документа в субколлекцию createdEvents данные будут выглядеть следующим образом:

(до) enter image description here

Я использую этот код для выполнения этого действия

export const updateEventsCreatedNumberWhenUserCreateNewEvent1 = functions.firestore
    .document('users/{userId}/createdEvents/{eventId}')
    .onCreate(async (snap, context) => {

        const userID = context.params.userId
        const userRef = snap.ref.firestore.collection('users').doc(userID)
        const userSnapshot = await userRef.get()

        if (userSnapshot) {
            // if data is available

            const numberOfEventCreated = userSnapshot.data().numberOfEventCreated
            return userRef.update({
                numberOfEventCreated: numberOfEventCreated + 1
            })

        } else {

            const newUserData = userSnapshot.data()
            newUserData.numberOfEventCreated = 1
            return userRef.set(newUserData)

        }



    });

но я всегда получаю NaN в поле numberOfEventCreated, которое я только что создал. нет ошибок в firebase облачной функции log консоли консоли

(после) enter image description here

что пошло не так?

1 Ответ

0 голосов
/ 02 сентября 2018

Изначально ваш документ существует, поэтому if (userSnapshot) равно true. Но у него нет поля numberOfEventCreated, поэтому userSnapshot.data().numberOfEventCreated равно undefined. И undefined + 1 равно NaN (для не-числа).

Вы хотите поймать условие по-другому:

if (userSnapshot) {
    // if data is available

    const numberOfEventCreated = userSnapshot.data().numberOfEventCreated
    return userRef.update({
        numberOfEventCreated: (numberOfEventCreated || 0) + 1
    })

} else {

    const newUserData = userSnapshot.data()
    newUserData.numberOfEventCreated = 1
    return userRef.set(newUserData)

}

(numberOfEventCreated || 0) + 1 соответствует действительному значению из документа или (если в документе нет numberOfEventCreated) до 0.

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