【问题标题】:How to update a Firestore field from a pub sub function如何从 pub 子函数更新 Firestore 字段
【发布时间】:2020-05-05 08:20:27
【问题描述】:

我已经设置了一个 pub/sub 函数来每分钟触发一次,我想检查当前时间是否等于任何 Firestore 实体的开始时间,然后更改一个值:

exports.updateDraftStatus = (event, context) => {
  const pubsubMessage = event.data;
  console.log(Buffer.from(pubsubMessage, 'base64').toString());

  const db = admin.firestore();
  time = admin.firestore.Timestamp.fromMillis(Date.now())
  const snap = db.collection("leagues").where("startTime", time).get()
  await Promise.all(snap.docs.map(doc => doc.ref.update({Started: 'Off'})));
};

【问题讨论】:

    标签: javascript google-cloud-firestore google-cloud-pubsub


    【解决方案1】:

    .get() method 返回 Promise<QuerySnapshot>,而不是 QuerySnapshot。您需要await 快照,或使用then() 块。

    exports.updateDraftStatus = async (event, context) => {
      const pubsubMessage = event.data;
      console.log(Buffer.from(pubsubMessage, 'base64').toString());
    
      const db = admin.firestore();
      time = admin.firestore.Timestamp.fromMillis(Date.now())
      const snap = await db.collection("leagues").where("startTime", time).get()
      await Promise.all(snap.docs.map(doc => doc.ref.update({Started: 'Off'})));
    };
    

    exports.updateDraftStatus = (event, context) => {
      const pubsubMessage = event.data;
      console.log(Buffer.from(pubsubMessage, 'base64').toString());
    
      const db = admin.firestore();
      time = admin.firestore.Timestamp.fromMillis(Date.now())
      return db.collection("leagues").where("startTime", time).get().then((snap) => {
        return Promise.all(snap.docs.map(doc => doc.ref.update({Started: 'Off'})));
      })
    };
    

    【讨论】:

    • 谢谢弗兰克我会尝试这个解决方案,我已经将它更改为您的建议,但现在我收到一个错误,管理员未定义我已在 json 包中的依赖项下添加了管理员,但仍然未定义有什么建议吗?
    • 这听起来像是一个不同的问题,与您如何将admin 包导入index.js 相关。它应该类似于const admin = require('firebase-admin');
    猜你喜欢
    • 2019-06-05
    • 2020-03-27
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多