Node.js Firestore云函数无限循环
我正在尝试向订阅主题的用户发送一条云消息。问题是我现在在updateRecord上得到了一个无限循环。如果(newData.count==prevData.count)返回null,我试图在这里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
捕获它代码>但这不起作用。我想发生的是,我正在更新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视频)我已经回答了。希望它能帮助别人