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

Firestore获取文档数据报错:exercise.data()不是函数的技术问询

问题原因及解决方法

你遇到的问题核心是:doc(db, ...)返回的是文档引用(DocumentReference),不是包含数据的文档快照(DocumentSnapshot),所以调用.data()会报错。doc()只是生成指向Firestore文档的路径标识,并没有实际从数据库拉取数据,自然没有.data()方法。

解决步骤

要获取文档数据,必须通过文档引用调用getDoc()方法(异步操作)来获取文档快照,快照对象才拥有.data()方法。针对批量文档的场景,推荐用Promise.all()批量处理异步请求,效率更高。

修改后的代码示例(async/await写法)

async function loadExercises() {
  // 生成所有目标文档的引用
  const exercisesRefs = chosenExercises.map(exercise => 
    doc(db, `Users/${auth.currentUser.uid}/Exercises/${exercise}`)
  );

  // 批量获取文档快照
  const exerciseSnapshots = await Promise.all(exercisesRefs.map(ref => getDoc(ref)));

  // 遍历快照提取数据
  exerciseSnapshots.forEach(snapshot => {
    if (snapshot.exists()) {
      console.log(snapshot.data());
    } else {
      console.log("目标文档不存在");
    }
  });
}

// 执行函数并处理错误
loadExercises().catch(error => console.error("加载数据失败:", error));

关键说明

  • getDoc()是异步函数,必须用await或.then()处理返回的Promise,否则无法拿到有效快照
  • 用Promise.all()可以并行发起多个文档请求,比逐个等待更高效
  • 必须检查snapshot.exists(),避免因文档不存在导致的后续逻辑错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:30:54