如何编写函数同时删除Firestore用户与Storage中存在的文件?
解决方案
你可以修改现有的云函数,加入Firebase Storage的文件删除逻辑,同时处理头像文件不存在的情况,避免因文件不存在导致整个函数执行失败。以下是修改后的完整代码:
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); exports.deleteUser = functions.auth.user().onDelete(async (user) => { const uid = user.uid; // 执行Firestore文档删除 const firestoreDeletePromise = admin .firestore() .collection("users") .doc(uid) .delete(); // 构建用户头像的Storage文件引用 const storageRef = admin.storage().bucket().file(`images/${uid}.png`); // 删除头像文件,捕获文件不存在的错误 const storageDeletePromise = storageRef.delete().catch((err) => { if (err.code === "ENOENT") { functions.logger.info(`头像文件 images/${uid}.png 不存在,跳过删除`); } else { // 非文件不存在的错误抛出,便于排查 throw err; } }); // 等待两个删除操作完成 await Promise.all([firestoreDeletePromise, storageDeletePromise]); functions.logger.info(`用户 ${uid} 的数据处理完成`); });
核心要点
- 使用
async/await简化异步代码逻辑,通过Promise.all并行执行两个删除操作,提升执行效率 - 针对Storage删除操作做了错误处理:
- 当错误码为
ENOENT时(代表文件不存在),仅记录日志跳过,不会影响Firestore文档的删除流程 - 其他类型的错误会重新抛出,方便在Firebase控制台查看错误日志定位问题
- 当错误码为
- 用
functions.logger记录操作日志,后续排查问题更便捷
内容的提问来源于stack exchange,提问作者Always Learner
相关产品推荐
相关产品推荐

