如何使用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
相关产品推荐
相关产品推荐

