我在从文档中获取数据时遇到麻烦,并将该文档中的单个字段用作我的日程表Cloud Function的参数,首先我试图获取文档,然后调用getData()函数并使用该变量调用它的.data,我正在等待调用.get(),但仍然收到此错误。
类型“ Promise>”上不存在属性“数据”。
由于出现此错误,我无法致电await getData();
仅当“模块”选项设置为“ esnext”或“系统”且“目标”选项设置为“ es2017”或更高版本时,才允许使用顶级“等待”表达式。
有什么办法解决吗?我首先需要获取包含运行计划功能的当月日期的数据。
这是我的代码:
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
/// Get the config data for schedule time and debt payment
async function getData() {
return await admin.firestore().doc("neighbors/0000_admin").get();
}
const configData = getData();
/// Updates the debt for each neighbor on a specific day of each month
export const debtUpdatePerMonth = functions.pubsub
.schedule(`${configData?.data()?.day_of_month_to_pay} of month 06:00`)
.onRun(async (context) => {
return admin
.firestore()
.collection("neighbors")
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
return doc.ref.update({
debt: doc.data()?.debt + configData?.data()?.monthly_pay,
});
});
});
});
预先感谢
答案 0 :(得分:0)
无法像在此处尝试的那样基于动态加载的数据声明Cloud Function:
/// Get the config data for schedule time and debt payment
async function getData() {
return await admin.firestore().doc("neighbors/0000_admin").get();
}
const configData = getData();
/// Updates the debt for each neighbor on a specific day of each month
export const debtUpdatePerMonth = functions.pubsub
.schedule(`${configData?.data()?.day_of_month_to_pay} of month 06:00`)
.onRun(async (context) => {
...
在部署时必须知道触发云功能的计划。
您要执行的操作可以通过使用Cloud Tasks完成。现在,您主要调用的将是可调用(或HTTPS)函数,该函数将对代码进行计划,然后调度Cloud Tasks。然后,这些云任务将调用您当前的onRun
函数。
道格(Doug)为此撰写了一篇很棒的博客文章:How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL)