Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

160
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!