Получение данных из Firestore snap.data объекта onCreate, но с неопределенной ошибкой - PullRequest
0 голосов
/ 03 мая 2019

Я получаю данные (и отправляю их в PubSub) из нескольких документов, которые записываются в виде пакета в коллекцию Firestore. Это мой код:

exports.orderItemstoPubSub = functions
.firestore
.document('Org/{root}/ABC/{abc}/DEF/{def}/GHI/{ghi}')
.onCreate((snap, context) => {

    //publish a message to Cloud Pub/Sub topic
    const stringFromFS1 = snap.data;

    const JSONstringFromFS1 = JSON.stringify(stringFromFS1);
    console.log(`JSONstringFromFS1=${JSONstringFromFS1}`)
    const dataBuffer = Buffer.from(JSONstringFromFS1)

    return pubsubClient
        .topic('projects/pubsubclient123-test/topics/pubsubclient123-test')
        .publish(dataBuffer)
        .then(messageId => {
            console.log(`Message ${messageId} published.`)
        })
        .catch(err => {
            console.error('ERROR:', err);
        })    
});

Я не уверен, что это связано с проблемой пакета, но мой другой код onWrite работает (данные не записаны в пакетном режиме в Firestore):

exports.orderIDtoPubSub = functions
.firestore
.document('Org/{root}/ABC/{abc}/DEF/{def}')
.onWrite((change, context) => {

const stringFromFS = change.after.exists ? change.after.data() : null;

    stringFromFS.abc=context.params.abc;
    stringFromFS.root=context.params.root;

    const JSONstringFromFS = JSON.stringify(stringFromFS);
    console.log(`JSONstringFromFS=${JSONstringFromFS}`)
    const dataBuffer = Buffer.from(JSONstringFromFS)

    return pubsubClient
        .topic('projects/pubsubclient123-test/topics/pubsubclient123-test')
        .publish(dataBuffer)
        .then(messageId => {
            console.log(`Message ${messageId} published.`)
        })
        .catch(err => {
            console.error('ERROR:', err);
        })
});

Я получаю эту ошибку из 1-го кода выше: JSONstringFromFS1=undefined из файла журнала функций.

1) Замедляет ли пакетная запись в Firestore запись в базу данных и, следовательно, выдает эту ошибку?

2) Если ответ да, как мне обойти это?

3) Есть ли другой способ прочитать все документы из /Org/{root}/ABC/{abc}/DEF/{def}/GHI/{ghi}?

Спасибо.

1 Ответ

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

Проблема возникает из-за того, что вам нужно сделать

const stringFromFS1 = snap.data();

вместо

const stringFromFS1 = snap.data;

data() - это метод, а не свойство, см. https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentSnapshot#data.

Обратите внимание, что для облачной функции, запускаемой onWrite(), вы правильно вызываете метод с помощью change.after.data().

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