typescript - Preluarea datelor din Firestore snap.data într-un onCreate, dar apare o eroare de tip undefined


Recuperez date (și le trimit la PubSub) din mai multe documente care sunt scrise în bloc într-o colecție Firestore. Acesta este codul meu:

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

Nu sunt sigur dacă este problema cu lotul care cauzează asta, dar celălalt meu cod onWrite funcționează (datele nu sunt scrise în lot în 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);
        })
});

Primesc această eroare din primul cod de mai sus: JSONstringFromFS1=undefined din fișierul de log al funcțiilor.

1) Scrierea în loturi în Firestore „încetinește” scrierea în baza de date și, prin urmare, îmi dă această eroare?

2) Dacă răspunsul este da, cum pot să o ocolesc?

3) Există o altă modalitate prin care pot citi toate documentele din /Org/{root}/ABC/{abc}/DEF/{def}/GHI/{ghi} ?

Mulțumesc.

Răspuns #1

Problema provine din faptul că trebuie să faci

const stringFromFS1 = snap.data();

în loc de

const stringFromFS1 = snap.data;

data() este o metodă și nu o proprietate, vezi https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentSnapshot#data.

Rețineți că pentru funcția Cloud declanșată onWrite() apelați corect metoda cu change.after.data().