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

Firestore创建子集合时出现indexOf未定义错误求助

问题解决:Firestore创建子集合时报错TypeError: Cannot read properties of undefined (reading 'indexOf')

问题根源

你的createProject函数里,addDoc是异步操作,返回的是Promise对象,而非直接的DocumentReference。你直接访问projectRef.uid时,Promise没有这个属性,导致DocRef创建时传入了undefined,后续调用collection(DocRef,"team")时,因为无效的文档引用触发了indexOf相关的错误。另外,Firestore文档的ID属性是id,不是uid(uid是用户认证ID)。

修复步骤

  1. 将createProject改为异步函数,用await获取addDoc返回的真实DocumentReference。
  2. 使用文档引用的id属性来构建子集合的父文档引用。
  3. 异步操作建议都加上await,保证执行顺序和错误捕获。

修改后的代码

AuthContext.js中修改createProject函数

async function createProject(projectName) {
  // 等待addDoc完成,获取真实的文档引用
  const projectRef = await addDoc(collection(db, projectsCollection), {
    "name": projectName
  });

  // 使用文档的id属性构建父文档引用
  const DocRef = doc(db, projectsCollection , projectRef.id);
  
  // 创建team子集合文档
  await addDoc(collection(DocRef,"team"), {
    "email": "hey@gmail.com"
  });

  // 创建tasks子集合文档
  await addDoc(collection(DocRef,"tasks"), {
    "title": "lets go do something",
    "status": "doing",
    "assignedTo": "hey@gmail.com"
  });
}

ProjectAssign.js中调用时加上await

const handleCreateProject = async () => {
  try { 
    await createProject(projectName);
    // 可添加创建成功后的逻辑,比如跳转页面
    Router.push("/UserDashboard");
  } catch (error) {
    console.error("创建项目失败:", error);
  }
}

额外说明

  • Firestore的异步操作(如addDoc、setDoc)都返回Promise,必须通过await或.then()才能获取结果。
  • 文档引用的ID是id属性,用户的认证ID才是uid,不要混淆两者。
  • 加上await后,错误可以被try/catch捕获,方便排查问题。

内容的提问来源于stack exchange,提问作者André Gomes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:20:39