Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firestore云函数无限循环_Node.js_Google Cloud Firestore_Google Cloud Functions - Fatal编程技术网

Node.js Firestore云函数无限循环

Node.js Firestore云函数无限循环,node.js,google-cloud-firestore,google-cloud-functions,Node.js,Google Cloud Firestore,Google Cloud Functions,我正在尝试向订阅主题的用户发送一条云消息。问题是我现在在updateRecord上得到了一个无限循环。如果(newData.count==prevData.count)返回null,我试图在这里捕获它但这不起作用。我想发生的是,我正在更新firestore文档中的记录,然后再次调用update函数导致循环 exports.updateRecord = functions.firestore.document("records/{recordsID}").onUpdate((change, con

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

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);
    });

});
如果(newData.count==prevData.count)返回null,则行
if不起作用,因为每次调用函数时,代码总是以递增的计数更新文档


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

遗憾的是,您不能像在RTDB触发器中一样,只检查
context.auth
/
context.authType
的值。计数采用以前的数据值并递增1。我试图实现的是更新数据的计数值,之所以会出现这种情况,是因为多个用户将在他们的应用程序中从不同的状态更新此值,我不能相信他们的计数值会是准确的。在文档上更新计数后,函数应发送一条云消息,然后退出。希望这有助于澄清这一点。您将需要一个不同的条件来确定函数调用循环何时终止。在这种情况下,以下操作是否有效:
const newData=change.after.data().count;const prevData=change.before&&change.before.data()&&change.before.data()计数?change.before.data().计数:0;如果(prevData!==newData){//Notify users}否则{return null;}
@DougStevenson上述方法是否有效?(忘了贴标签,看了你的YT视频)我已经回答了。希望它能帮助别人