Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

159
Vistas
reverse () en los documentos querySnapshot no funcionan?

Estoy tratando de voltear mis documentos de instantáneas de consulta, pero no sucede nada:

 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) { console.log("=== BEFORE ==="); querySnapshot.docs.forEach((prev) => { console.log(prev.data().date.toDate()); }); // Flip the docs if we are fetching new posts querySnapshot.docs.reverse(); <----- console.log("=== AFTER FLIP ==="); querySnapshot.docs.forEach((prev) => { console.log(prev.data().date.toDate()); }); } ... }

Cuando acabo de llamar a mi método así:

 getUserPosts("...", false, new Date()); // will execute an orderBy("date", "asc")

La consola registra los siguientes datos:

 === BEFORE === 2021-11-08T20:57:31.382Z // (oldest) 2021-11-08T20:57:32.816Z 2021-11-08T20:57:36.130Z // (most recent) === AFTER FLIP === 2021-11-08T20:57:31.382Z // (oldest) 2021-11-08T20:57:32.816Z 2021-11-08T20:57:36.130Z // (most recent)

Como puede ver, los documentos no están volteados... Espero obtener

 === AFTER FLIP === 2021-11-08T20:57:36.130Z // (most recent) 2021-11-08T20:57:32.816Z 2021-11-08T20:57:31.382Z // (oldest)

como resultado de la operación, y no entiendo por qué esto no funciona si el siguiente código sí lo hace:

 const querySnapshot = { docs: [ { data: () => ({ timestamp: 1 }) }, { data: () => ({ timestamp: 2 }) } ] } // Before flipping: [1, 2] querySnapshot.docs.reverse(); // Expected: [2, 1] querySnapshot.docs.forEach((doc) => { console.log(doc.data().timestamp) })

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La propiedad QuerySnapshot.docs se calcula y devuelve una nueva matriz cada vez que la llama. Su implementación :

 /** An array of all the documents in the `QuerySnapshot`. */ get docs(): Array<QueryDocumentSnapshot<T>> { const result: Array<QueryDocumentSnapshot<T>> = []; this.forEach(doc => result.push(doc)); return result; }

Entonces, su llamada reverse() invierte una matriz efímera, mientras que su llamada posterior a querySnapshot.docs luego devuelve una nueva matriz en el orden de la base de datos.


Para solucionar este problema, almacene una referencia a los documentos cuando los obtenga por primera vez de QuerySnapshot.docs e invierta eso :

 console.log("=== BEFORE ==="); let docs = querySnapshot.docs; docs.forEach((prev) => { console.log(prev.data().date.toDate()); }); // Flip the docs if we are fetching new posts docs.reverse(); <----- console.log("=== AFTER FLIP ==="); docs.forEach((prev) => { console.log(prev.data().date.toDate()); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda