typescript - 防止在 Firebase 函数中调用子触发器
问题描述
美好的一天,我对 firebase 函数中子触发器的行为有一点困难。为了演示,我创建了一个小项目。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
// ON CREATE ITEM
export const onItemCraate = functions.database.ref('listItems/{listKey}/{itemKey}').onCreate(async(snapshot, context)=>{
try{
return admin.database().ref(`list/${context.params.listKey}/itemCount`).transaction(count =>{
return count+1;
});
}catch (error){
throw new functions.https.HttpsError(error.code, error.message, error.details);
}
})
// ON DELETE ITEM
export const onItemDelete = functions.database.ref('listItems/{listKey}/{itemKey}').onDelete(async(snapshot, context)=>{
try{
return admin.database().ref(`list/${context.params.listKey}/itemCount`).transaction(count =>{
return count-1;
});
}catch (error){
throw new functions.https.HttpsError(error.code, error.message, error.details);
}
},)
// ON LIST DELETE
export const onListDelete = functions.database.ref('list/{listKey}').onDelete(async(snapshot, context)=>{
try{
return admin.database().ref(`listItems/${context.params.listKey}`).remove();
}catch (error){
throw new functions.https.HttpsError(error.code, error.message, error.details);
}
})
所以问题是:当我删除列表时,“onDeleteList”触发删除项目firebase为每个listItem触发“onItemDelete”。然后在“ghost”列表中更新“itemCount”。当父母被移除时,有什么方法可以防止孩子触发呼叫?下图:
解决方案
当父母被移除时,有什么方法可以防止孩子触发呼叫?
不会。删除父节点时会隐式删除子节点,这将始终触发与子节点路径匹配的 onDelete 函数。
如果您希望触发器在某些情况下执行不同的操作,则必须对该函数进行编码以检测该情况并采取相应措施。