【问题标题】:Firestore: then triggers twice?Firestore:然后触发两次?
【发布时间】:2021-12-20 20:39:43
【问题描述】:

我有一个 TypeScript 代码的 sn-p(我检查了编译后的 JS:看起来不错),它用于更新我的订阅 firestore 集合中的相应文档。这是一个基于 Fire 的函数,由 Stripe webhook 调用。

const setSubscriptionStateByStripeId = (
  suscriptionId: string,
  targetState: Stripe.Subscription.Status,
  stripeSubscription: Stripe.Subscription): Promise<void> => {
  return new Promise<void>((resolve, reject) => {

    functions.logger.info("CHECKPOINT A");
    // CHECK A
    const db = admin.firestore();
    db.collection("subscriptions")
      .doc(suscriptionId)
      .update(
        {
          state: targetState,
          stripeSubscription: stripeSubscription,
        }
      )
      .then(() => {
        functions.logger.info("CHECKPOINT B");
        resolve();
      })
      .catch((err: Error) => {
        reject(new Error("could not set subscription"));
      });
  });
};

我希望每个CHECKPOINT A 日志都会显示一个CHECKPOINT B 日志。但是,当我过滤到单个执行时,Firebase 函数日志有时会显示:

CHECKPOINT A
CHECKPOINT B
CHECKPOINT B

我想这是一种“当你理解它时它是完全有意义的”——情况。谁能帮我理解一下?

【问题讨论】:

  • 请编辑问题以显示任何人都可以用来重现这种情况的完整最小代码,以及触发它所采取的步骤。
  • 您用google-cloud-functions 标记,但您的代码和描述都没有表明它们是相关的。如果 Cloud Functions 与问题相关,请编辑您的问题以说明如何。如果不是,请删除该标签。
  • @DougStevenson 我添加了有错误的辅助方法。弗兰克:Firebase 函数不只是谷歌云函数的封装吗?谢谢两位:我很荣幸您阅读了我的问题!

标签: node.js google-cloud-firestore google-cloud-functions firebase-admin


【解决方案1】:

那不应该发生。我想不出为什么应该这样做。

很可能您没有正确过滤单个执行(或日志有问题) - 有时当我查看日志时,我会看到您所看到的类似内容,但经过更好的调查后,我了解正在发生的事情并且我错了.代码是承诺的,这意味着 B 可以记录到 A 记录点之后的位置,并且可以与其他执行的日志混合。

我建议改进您的日志以将 A 点和 B 点与一些 ID 联系在一起。 示例:

const timestamp = new Date().getTime()
functions.logger.log(`CHECKPOINT A ${timestamp }`);

db.collection("subscriptions")
   .where("someIdField", "==", "someId123")
   .get()
   .then((querySnapshot: any) => {
       functions.logger.log(`CHECKPOINT B ${timestamp}`);
   }

另外为了调查日志,不要在firebase界面上使用日志查看器,我发现那没用。转到函数详细信息 -> 日志 -> 在日志资源管理器中查看。

如果真的发生了,请尝试提供完整的代码(或只是最小的可行示例)和来自日志资源管理器的屏幕截图,过滤为单个执行 ID。

【讨论】:

  • 感谢您的建议。继续检查,但看起来一样。这真的很奇怪,让我想起了 C/C++ 时代,设置位或内存问题会导致不可预测的行为。
猜你喜欢
  • 2021-08-03
  • 2021-08-06
  • 2012-07-16
  • 2022-01-08
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多