如何将Firebase查询结果正确存入数组?
解决Firebase查询结果无法正确存入数组的问题
你当前代码的核心问题是数组objectArr被定义在forEach循环内部,每次循环都会重新创建一个空数组,导致每次只能存入当前遍历到的单个对象,循环结束后也无法保留完整的结果集合。
修正后的代码如下:
onAuthStateChanged(auth, (user) => { if (user) { const userID = user.uid const objectDoc = query(collection(db, "objects"), where("user", "==", userID)); const getObjectDoc = async () => { const querySnapshot = await getDocs(objectDoc); // 把数组声明移到循环外部,确保全程使用同一个数组 let objectArr = [] querySnapshot.forEach((doc) => { console.log("当前对象 => ", doc.data()); objectArr.push(doc.data()) }); // 循环结束后打印完整数组 console.log("全部对象数组 => ", objectArr) } getObjectDoc() } else {} })
关键修正点:
- 将
let objectArr = []移至forEach循环外部,避免每次循环重置数组 - 在循环结束后统一操作完整数组(比如打印、后续业务逻辑处理),而不是在循环内部单次打印
另外,你也可以使用querySnapshot.docs.map()方法更简洁地生成结果数组:
const getObjectDoc = async () => { const querySnapshot = await getDocs(objectDoc); const objectArr = querySnapshot.docs.map(doc => doc.data()); console.log("全部对象数组 => ", objectArr) }
这种方式利用数组map方法直接将查询快照中的每个文档数据转换为数组元素,代码更简洁高效。
内容的提问来源于stack exchange,提问作者234htjBB23
相关产品推荐
相关产品推荐

