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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:38