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

439
Views
¿Cómo ordenar una colección de base de fuego y luego escribir algo en cada documento?

Hola, soy nuevo en las funciones de la nube de firebase y quiero ordenar una colección, que se almacena en firestore, por un campo y luego escribir en cada documento de la colección la 'posición' (esto debería suceder cada 60 minutos). Después de leer la documentación y algunas sugerencias de Stackoverflow, intenté seguir el enfoque.

 exports.scheduledFunctionPosition = functions.pubsub.schedule('every 60 minutes').onRun((context) => { return admin.firestore().collection("example") .orderBy("number", "desc") .get() .then(querySnapshot => { if (!querySnapshot.empty) { for(let i =0;i<querySnapshot.size;i++){ var queryDocumentSnapshotTmp = querySnapshot.docs[i]; queryDocumentSnapshotTmp.ref.update({'position':i+1}); } return null; } else { console.log(""); return null; } });

Como mis habilidades de programación no son muy buenas, lo intenté de la manera más fácil, pero creo que hay un problema con la programación asíncrona. Este código funciona perfecto para los documentos con los números más altos. Pero cuando hay demasiados documentos, esta función no actualizará los últimos documentos. ¿Existe alguna solucion para esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El .update() también es asíncrono; es probable que deba esperarlo, ya sea usando .then() o cambiando a async/await . Mi estilo personal lo escribiría así:

 exports.scheduledFunctionPosition = functions .pubsub .schedule('every 60 minutes') .onRun(async (context) => { //will be returning a PROMISE let QuerySnapshot = await admin.firestore().collection("example") .orderBy("number", "desc") .get(); return QuerySnapshot.empty ? (console.log(""), Promise.resolve(null)) : Promise.all( //Promise.all waits for all promises in an array to complete //returns an array, but we use it for the array of promises QuerySnapshot.docs.map(async (doc, index) => { return doc.ref.update({'position':index+1}) //returns a promise }); });

Devolver la Promesa asegura que la función espere a que se completen las operaciones.

También tenga en cuenta que las funciones de la nube tienen un límite de tiempo estricto; el valor predeterminado es de 60 segundos. Pueden expirar si tiene demasiados registros.

over 4 years ago · Santiago Trujillo 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!