typescript - 从 onCreate 的 Firestore snap.data 检索数据但出现未定义的错误

标签 typescript firebase google-cloud-firestore google-cloud-functions

我正在从批量写入 Firestore 集合的多个文档中检索数据(并将其发送到 PubSub)。这是我的代码:

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

我从上面的第一个代码中收到此错误:函数日志文件中的 JSONstringFromFS1=undefined

1) 批量写入 Firestore 是否会“减慢”数据库写入速度,从而导致出现此错误?

2)如果答案是肯定的,我该如何规避这个问题?

3) 有没有其他方法可以读取 /Org/{root}/ABC/{abc}/DEF/{def}/GHI/{ghi} 中的所有文档?

谢谢。

最佳答案

问题来自于你必须做的事实

const stringFromFS1 = snap.data();

而不是

const stringFromFS1 = snap.data;

data() 是方法而不是属性,请参阅 https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentSnapshot#data .

请注意,对于 onWrite() 触发的云函数,您可以使用 change.after.data() 正确调用该方法。

关于typescript - 从 onCreate 的 Firestore snap.data 检索数据但出现未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55967704/

相关文章:

javascript - 使用 Cypress 选择文本

angular - 事件发射器工作一次但不是第二次 Angular 8

javascript - 错误 : Cannot find a differ supporting object '[object Object]' of type 'object' . NgFor 只支持绑定(bind)到 Iterables

android - 如何修复 Firestore 崩溃中的内部错误

dart - 如何将对象列表添加到 Firestore?

node.js - Firebase 将原始数据上传到存储桶

javascript - firestore 获取五个具有更多子集合数量的文档

firebase - 如何在Flutter中使用Firebase创建时间轴供稿?

javascript - react-native-firebase 重发消息代码

ios - 具有顺序和限制的 Firestore 复合查询