Expo项目读取Firestore数据触发内部未处理错误求助
Expo + Firestore 读取数据时的内部错误问题
错误日志
ERROR [2024-01-21T17:28:49.065Z] @firebase/firestore: Firestore (10.7.2): INTERNAL UNHANDLED ERROR: TypeError: Cannot read property 'includes' of undefined at isSafari (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:154341:53) at __PRIVATE_getDefaultRelativeIndexReadCostPerDocument (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:181880:35) at __PRIVATE_QueryEngine (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:181881:8) at createLocalStore (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:187375:83) at ?anon_0_ (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:187355:256) at next (native) at asyncGeneratorStep (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:7269:26) at _next (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:7288:29) at tryCallOne (/home/expo/workingdir/build/react-native-lab/react-native/packages/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/6q1z5s36/x86_64/lib/InternalBytecode/InternalBytecode.js:53:16) at anonymous (/home/expo/workingdir/build/react-native-lab/react-native/packages/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/6q1z5s36/x86_64/lib/InternalBytecode/InternalBytecode.js:139:27) at apply (native) at anonymous (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:46872:26) at _callTimer (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:46751:17) at _callReactNativeMicrotasksPass (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:46796:17) at callReactNativeMicrotasks (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:47002:44) at __callReactNativeMicrotasks (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:9343:48) at anonymous (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:9116:45) at __guard (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:9315:15) at flushedQueue (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:9115:21) at callFunctionReturnFlushedQueue (http://192.168.100.98:8081/node_modules%5Cexpo%5CAppEntry.bundle//&platform=android&dev=true&hot=false&transform.engine=hermes&transform.routerRoot=app:9100:33)
调用代码
const querySnapshot = async () => { try { const snapshot = await getDocs(collection(db, "sales")); snapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); } catch (error) { console.log(error.message); }};
已尝试操作
- 更新项目中Firebase和Expo版本,问题未解决
解决方案建议
1. 修正Firestore初始化配置
确保在Expo环境下正确初始化Firestore,添加React Native兼容配置:
import { initializeFirestore } from 'firebase/firestore'; import { initializeApp } from 'firebase/app'; const firebaseConfig = { /* 你的项目配置 */ }; const app = initializeApp(firebaseConfig); const db = initializeFirestore(app, { experimentalForceLongPolling: true, });
2. 调整Firestore版本
Firestore 10.7.2在Hermes引擎下存在兼容问题,可降级到10.6.0或升级到10.8.0+:
npm install firebase@10.8.0 # 或 yarn add firebase@10.8.0
3. 临时禁用本地缓存
绕过内部isSafari检测逻辑,强制从服务器读取数据:
const snapshot = await getDocs(collection(db, "sales"), { cache: 'server-only' });
4. 清理项目缓存
清理Expo和Node模块缓存后重新构建:
expo r -c rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者G1nd3kk
相关产品推荐
相关产品推荐

