You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用deleteObject删除不存在的存储对象时报错如何解决?

问题说明

开发用户数据删除功能时,清理存储用户文件的环节如果遇到用户从未上传过对应头像/文件的情况,deleteObject方法会抛出存储对象不存在的错误,中断后续删除用户账号的逻辑,且不希望额外发起GET请求预先检查文件是否存在。

问题对应的报错信息:

Object 'profiles/id' does not exist. (storage/object-not-found)

原有实现代码:

// Delete user's Storage Data
const storage = getStorage();
const storageRef = ref(storage, `profiles/${currentUser.uid}`);
await deleteObject(storageRef);
// Delete the user 
await deleteUser(currentUser);
解决方案

直接在删除存储对象的逻辑外层增加错误捕获,仅对「对象不存在」这一特定错误做放行处理,其余错误正常抛出,既不需要额外发存在性校验请求,也不会中断后续逻辑,同时不会掩盖其他真实故障。

这种方案比提前发GET请求校验更优:

  • 减少一次网络请求开销,性能更好
  • 规避了「校验时文件存在、执行删除前文件被其他操作删掉」的竞态问题
  • 不会误吞权限不足、服务不可用等其他类型的错误,方便排查问题

修改后的可直接运行的代码:

// Delete user's Storage Data
const storage = getStorage();
const storageRef = ref(storage, `profiles/${currentUser.uid}`);
try {
  await deleteObject(storageRef);
} catch (error) {
  // 仅当错误是文件不存在时跳过,其余错误正常抛出
  if (error.code !== 'storage/object-not-found') {
    throw error;
  }
}
// Delete the user 
await deleteUser(currentUser);
注意事项
  • 禁止使用空catch块捕获所有错误不做处理,否则出现存储权限异常、服务故障等问题时会被静默忽略,导致用户文件残留但账号已被删除的数据不一致问题
  • 如果后续有其他同类型的存储删除需求(比如删除用户上传的其他附件),可以把这段逻辑封装成通用的静默删除方法,传入对应存储引用即可复用

内容的提问来源于stack exchange,提问作者Richardson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:24:21