Невозможно получить данные из документа в облачных функциях (возврат не определен) - PullRequest
1 голос
/ 21 мая 2019

У меня есть документ с 2 полями: field1, field2 (изменено имя для простоты).

Из облачной функции я пытаюсь получить значение из field1. Функции не являются триггером для этого конкретного документа, и я получаю значение, подобное этому:

const user_collection = db.collection("user")
const photoName = user_collection.doc(userid).field1

Однако, значение, которое я получаю взамен undefined. Я пытался с методами data () или get (), но я в конечном итоге с ошибкой ...is not a function. Не могу найти ничего в документах или SO, которые помогли бы мне получить значение поля из документа.

Любые предложения о том, как извлечь это поле?

EDIT:

exports.onUserDeletion = functions.auth.user().onDelete((user) => {

    const userid = user.uid
    const photoName = user_collection.doc(userid).photo    //<--- this is "undefined"
    const filePath = `user_photo/${photoName}`
    const file = bucket.file(filePath)

    console.log(`userid: ${userid} photoName: ${photoName} filePath: ${filePath} file: ${file}`)

    return highscore_collection.doc(userid).delete().then(user => {
        return user_collection.doc(userid).delete().then(user => {
            return file.delete()
        })
    })

})

enter image description here

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы должны сделать следующее:

exports.deleteUser = functions.firestore.document('user/{userID}').onDelete((snap, context) => {
        const deletedValue = snap.data().photo;
});

Из документов :

Вы также можете вызвать функцию при удалении документа, используя функцию onDelete() с подстановочным знаком.


В своем коде вы используете authentication trigger, поэтому вы не можете получить доступ к полю photo в своем документе.

Из документов :

onDelete

Обработчик событий, который запускается каждый раз, когда пользователь Firebase Authentication удаляется.

onDelete() имеет параметр типа UserRecord. Вы можете проверить здесь свойства UserRecord:

https://firebase.google.com/docs/reference/functions/functions.auth.UserRecord.html

1 голос
/ 21 мая 2019

Пользователь уже удален.Вот почему выборка из базы данных не работает.

exports.onUserDeletion = functions.auth.user().onDelete((user) => {   
        const userid = user.uid
        const photoName = user.photo    //<--- this is "undefined"
        const filePath = `user_photo/${photoName}`
        const file = bucket.file(filePath)

        console.log(`userid: ${userid} photoName: ${photoName} filePath: ${filePath} file: ${file}`)

        return highscore_collection.doc(userid).delete().then(user => {
            return user_collection.doc(userid).delete().then(user => {
                return file.delete()
            })
        })

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