Получите данные из Firestore, прежде чем планировать облачную функцию - PullRequest
0 голосов
/ 20 июня 2020

У меня возникли проблемы с получением данных из документа и использованием одного поля из этого документа в качестве параметра моей облачной функции расписания, сначала я пытаюсь получить документ, затем вызываю функцию getData () и использую эту переменную чтобы вызвать .data из него, и я вызываю .get () с ожиданием, но я получаю эту ошибку.

Свойство data не существует для типа Promise>.

И я не могу позвонить await getData();, потому что получаю эту ошибку

Выражения верхнего уровня 'await' разрешены, только если для параметра 'module' задано значение 'esnext' или 'system', а для параметра 'target' установлено значение '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 голосов
/ 20 июня 2020

Невозможно объявить облачную функцию на основе динамически загружаемых данных, как вы пытаетесь сделать здесь:

/// 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) => {
    ...

Расписание, которое запускает облачную функцию, должно быть известно во время развертывания.

То, что вы пытаетесь сделать, можно выполнить с помощью облачных задач. То, что теперь является вашим основным вызовом, будет вызываемой функцией (или HTTPS), код которой затем планирует облачные задачи. Затем эти облачные задачи вызывают вашу текущую функцию onRun.

Дуг написал отличную запись в блоге об этом: Как запланировать запуск облачной функции в будущем с помощью облачных задач (для создания документа Firestore TTL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...