我有一个云函数,可以监听firestore 中路径的更新
export const onUserWrite = functions.firestore.document('/path/path').onWrite(async (change) => {
if (!change.after.exists) {
return;
}
await change.after.ref.update({somedata:'data'});
return true;
});
我认为这将导致无限循环,因为此代码await change.after.ref.update({somedata:'data'});
应该再次触发函数,从而导致无限循环。
如果是的话,为什么文档中没有提到这一点?
这个特定函数似乎会导致一个无限循环。由于它正在侦听Firestore中的任何写入操作,因此当await
语句使用更改参数的ref
(DocumentReference(属性(即DocumentSnapshot(更新当前文档时,它将再次执行自己。
Firebase函数存储库确实包含类似的示例函数,处理潜在无限循环的一种方法是在更新Firestore之前实现检查。这避免了对同一函数的无限递归调用。对于我链接的示例函数,当检测到新的更改时,文档将被更新,并且该特定函数通过首先检查文档属性是否设置为true来避免无限递归调用。
exports.moderator =
functions.database.ref('/messages/{messageId}').onWrite((change) => {
const message = change.after.val();
//If document is sanitized, skip the function
if (message && !message.sanitized) {
//...
return change.after.ref.update({
text: moderatedMessage,
sanitized: true,
moderated: message.text !== moderatedMessage,
});
//Sanitized the document, when this function runs again due to this update, it will be skipped
}
return null;
});
您也可以查看此相关问题,以了解不同的方法。