如何从 pub 子函数更新 Firestore 字段
Posted
技术标签:
【中文标题】如何从 pub 子函数更新 Firestore 字段【英文标题】:How to update a Firestore field from a pub sub function 【发布时间】: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')));
;
【问题讨论】:
【参考方案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');
。以上是关于如何从 pub 子函数更新 Firestore 字段的主要内容,如果未能解决你的问题,请参考以下文章