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

对querySnapshot.docs调用reverse()方法未生效该如何解决?

问题原因

Firebase Firestore 返回的 QuerySnapshot 对象的 docs 是只读 getter 属性,并非普通可写数组属性:每次访问 querySnapshot.docs 时,Firestore 都会重新生成并返回一个全新的数组副本。你调用 reverse() 反转的只是本次访问生成的临时副本,不会对后续访问 docs 返回的新数组产生任何影响,所以两次打印的顺序完全一致。

你自行构造的模拟对象可以正常反转,是因为你直接给 docs 赋值为普通可写数组,每次访问都是同一个数组实例,reverse() 会直接修改原数组,因此可以生效。

解决方法

先将 docs 数组拷贝到本地变量,直接操作这个本地变量即可:

export async function getUserPosts(
  userId,
  getOldPosts = true,
  startAfter,
  limit = MAX_USER_POSTS_TO_RETRIEVE
) {
  // ...原有逻辑

  const query = userPostsRef
    .orderBy("date", getOldPosts ? "desc" : "asc")
    .startAfter(startAfter);

  const querySnapshot = await query.limit(limit).get();

  if(!getOldPosts) {
    // 拷贝docs数组到本地变量,后续都操作这个变量
    const docs = [...querySnapshot.docs];
    console.log("=== BEFORE ===");
    docs.forEach((prev) => {
      console.log(prev.data().date.toDate());
    });

    // 反转本地数组
    docs.reverse();

    console.log("=== AFTER FLIP ===");
    docs.forEach((prev) => {
      console.log(prev.data().date.toDate());
    });

    // 后续逻辑都使用反转后的docs变量即可
  }

  // ...原有逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:01