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

如何使用async/await处理Firebase Firestore的各类错误

问题原因排查

正常情况下,Firestore 客户端的 get() 方法仅在请求本身失败时才会抛出异常,文档不存在本身不会触发 catch 分支,你遇到直接进入 catch 的情况优先排查两个常见原因:

  • 安全规则限制:你当前的用户身份没有对应集合/文档的读权限,Firestore 会直接返回权限拒绝错误,抛出异常
  • 网络请求异常:本地无网络、后端请求超时等网络层问题会触发异常

错误类型判断方法

Firebase 所有客户端抛出的错误都自带code枚举属性,你可以直接在 catch 分支中匹配该属性判断错误类型,返回对应提示,常见的 Firestore 错误码包括:

  • permission-denied:安全规则拒绝访问
  • not-found:请求的资源不存在(注意这个是请求本身的 404,不是文档不存在的情况)
  • unavailable:网络不可用、后端服务不可达

优化后代码示例

export const getResult = async (collection, docId) => {
  try {
    const resultRef = db.collection(collection);
    const result = await resultRef.doc(docId).get();

    if (result.exists) {
      // 这里也可以根据业务需求直接返回整个result Snapshot对象
      return { data: result.data() };
    } else {
      // 文档不存在的情况在这里处理,正常不会进入catch分支
      return { error: "文档不存在,无法获取对应数据" };
    }
  } catch (err) {
    console.error("获取文档失败:", err);
    // 匹配错误码返回对应提示
    switch(err.code) {
      case "permission-denied":
        return { error: "无权限访问该数据,请检查登录状态" };
      case "unavailable":
        return { error: "网络异常,请检查网络连接后重试" };
      default:
        return { error: `获取数据失败:${err.message}` };
    }
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:12:00