在计划云功能之前从Firestore获取数据

时间:2020-06-19 23:23:07

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

我在从文档中获取数据时遇到麻烦,并将该文档中的单个字段用作我的日程表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,
          });
        });
      });
  });

预先感谢

1 个答案:

答案 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)