【问题标题】:Firestore cloud function infinite loopFirestore 云函数无限循环
【发布时间】:2019-07-04 14:58:00
【问题描述】:

我正在尝试向订阅某个主题的用户发送云消息。问题是我现在在 updateRecord 上得到了一个无限循环。我试图在这里if(newData.count == prevData.count) return null; 捕捉它,但这不起作用。我认为发生的事情是我正在更新 firestore 文档中的记录,然后再次调用更新函数导致循环。

exports.updateRecord = functions.firestore.document("records/{recordsID}").onUpdate((change, context) => {

    const newData = change.after.data();
    const prevData = change.before.data();
    if(newData.count == prevData.count) return null;
    let newCount = prevData.count + 1;

    const doc = admin.firestore().doc(`/records/{recordsID}`);
    doc.set({ count: newCount })

    // TODO: -  Requires testing
    var topic = "global";

    const payload = {
        data: {
            count: `${newCount}`,
            firebaseId: `${newData.firebaseId}`,
            type: "updateRecord",
        }  
    };

    return admin.messaging().sendToTopic(topic, payload)
    .then((response) => {
        console.log('Message sent successfully');
    })
    .catch((error) => {
        console.log('Error sending message:', error);
    });

});

【问题讨论】:

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


【解决方案1】:

if(newData.count == prevData.count) return null; 行不起作用,因为您的代码总是在调用函数时每次以递增的计数更新文档。

从您的问题中不清楚该记录中的计数应该做什么,或者为什么您甚至需要更新文档。您还忽略了更新的承诺,这是另一个问题。您可能需要仔细考虑您在此处尝试解决的问题,并仔细解释为什么要在此代码中执行您正在执行的操作。

【讨论】:

  • 遗憾的是,您不能像在 RTDB 触发器中那样只检查 context.auth/context.authType 的值。
  • 计数取上一个数据值并增加 1。我想要实现的是更新数据上的计数值,这里发生这种情况的原因是多个用户会在他们的应用程序中从不同的状态更新这个值,我不能相信他们的计数会是准确的。一旦文档上的计数更新,该函数应该发送一条云消息,然后转义。希望这有助于澄清它。
  • 您将需要一个不同的条件来确定函数调用循环何时应该终止。
  • 在这种情况下以下工作是否有效:const newData = change.after.data().count; const prevData = change.before && change.before.data() && change.before.data().count ? change.before.data().count : 0; if (prevData !== newData) { // Notify users } else { return null; }
  • @DougStevenson 上述方法可行吗? (忘记标记并看过您的 YT 视频)
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2013-10-12
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多