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

使用Async Await从Firebase Firestore获取单条记录时出现Cannot read property 'data' of undefined错误的排查求助

Async/Await读取Firebase Firestore文档时出现「Cannot read property 'data' of undefined」错误

我尝试通过文档ID从Firebase Firestore中读取文档,不想使用官方文档里的.then()语法,想用Async Await实现,但运行时出现了Cannot read property 'data' of undefined的错误。以下是我的代码:

export const getOneJobById = async jobId => {
  try {
    const snapShot = await db.collection('jobs').doc(jobId).get();
    return snapShot.doc.data();
  } catch (error) {
    console.log(error.message);
  }
};

请帮我分析问题出在哪里。


问题根源

你这里的核心错误是对Firestore文档快照的结构理解有误:

  • 当你调用db.collection('jobs').doc(jobId).get()时,返回的snapShot直接就是单个文档的快照对象,它本身就拥有data()方法,不需要再通过.doc去访问。
  • 你写的snapShot.doc是不存在的属性,所以它的值是undefined,当你试图调用undefined.data()时,就会抛出你看到的错误。

修正后的代码

把代码里的snapShot.doc.data()改成snapShot.data()即可,另外建议加上文档存在性检查,避免文档不存在时返回undefined引发后续问题:

export const getOneJobById = async jobId => {
  try {
    const snapShot = await db.collection('jobs').doc(jobId).get();
    // 先检查文档是否存在
    if (!snapShot.exists) {
      console.log(`ID为${jobId}的职位文档不存在`);
      return null;
    }
    return snapShot.data();
  } catch (error) {
    console.log('读取文档失败:', error.message);
    throw error; // 可选:把错误抛出,让调用方可以处理
  }
};

补充说明

  • 如果是读取集合的多个文档(比如db.collection('jobs').get()),返回的才是集合快照,这时候需要通过snapShot.docs获取文档快照数组,再逐个调用data()。
  • 加上throw error是为了让调用这个函数的地方能捕获到错误,而不仅仅是在当前函数里打印日志,这样更符合异步代码的错误处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:22:32