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

136
Vistas
Nodo | Prometo no terminar

Estoy tratando de obtener datos de diferentes colecciones de MongoDB. Hago esto con Node.js y promesas. Aquí hay un código básico:

 await Promise.all( ["a", "b", "c"].map(async (collection) => { const query: any = { "_id": { $in: ids} } // I just use toArray for demonstration purposes const data = await this.db!.collection(collection).find(query).toArray() for (let i = 0; i < data.length; i++) { const document = data[i] // Do something... } console.log(collection) return true }) ) console.log("done")

Hago esto para ocho colecciones (a, b, ..., h). Los datos se obtienen de la base de datos y se procesan correctamente en un tiempo aceptable. Luego imprime el nombre de cada colección. Pero no continúa. No termina la promesa y va al registro hecho.

El método se llama en una tarea JS-Worker. Cual podría ser el problema aquí? Nunca tuve problemas con las promesas y la mayor cantidad de datos todavía.

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

0

Esto es en realidad una ejecución síncrona. No irá a la siguiente colección hasta que finalice la llamada a la base de datos anterior. La función de flecha debería devolver una promesa en su lugar.

La solución es reorganizar el código de esta manera:

 async function callDb(collection) { const query: any = { "_id": { $in: ids} } // I just use toArray for demonstration purposes const data = await this.db!.collection(collection).find(query).toArray() for (let i = 0; i < data.length; i++) { const document = data[i] // Do something... } console.log(collection) return true } await Promise.all( ["a", "b", "c"].map(callDb) ) console.log("done")
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