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

240
Vistas
Manera efectiva de esperar hasta que finalice la carga del archivo (Mongoose)

Actualmente estoy desarrollando una aplicación con React y Mongoose (MongoDB) donde cargo un archivo de texto, que contiene aproximadamente alrededor de 9000+ líneas, que contiene JSON. Cada línea es importante y necesito poder almacenarla en la base de datos para poder acceder a ella más tarde.

Configuré dos funciones, una que lee el archivo y otra que crea un modelo para cada solicitud y lo guarda en MongoDB.

Función para leer cada línea

 const createAndReadFile = async (filePath) => { //create a read stream of the File let fileStream = fs.createReadStream(filePath, 'utf8'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); for await (const line of rl) { let parsedJSONLine = JSON.parse(line); createAndAddToDB(parsedJSONLine); } };

Función para agregar a la base de datos cada línea.

 const createAndAddToDB = async (jsonRequest) => { try { let request = new Request(jsonRequest); await request.save(); } catch (error) {} };

Mi pregunta es, ¿cuál es la forma más efectiva de esperar hasta que todas las líneas se hayan convertido en un modelo y se hayan guardado en la base de datos?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Use Promise.all para esperar la resolución de todas las promesas que se crean en el ciclo de espera:

 var promises = []; for await (const line of rl) { let parsedJSONLine = JSON.parse(line); promises.push(createAndAddToDB(parsedJSONLine)); } return Promise.all(promises);

Alternativamente, puede realizar la conversión en el bucle for-await y escribir en la base de datos en un lote:

 var promises = []; for await (const line of rl) { let parsedJSONLine = JSON.parse(line); promises.push(convertToDBFormat(parsedJSONLine)); } return Promise.all(promises).then(function(converted) { return addToDBBatch(converted); });
over 4 years ago · Santiago Trujillo Denunciar

0

const createAndReadFile = async (filePath) => { //create a read stream of the File let fileStream = fs.createReadStream(filePath, 'utf8'); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); for (const line of rl) { let parsedJSONLine = JSON.parse(line); await createAndAddToDB(parsedJSONLine); } return 'file is processed'; };

Lo has escrito correctamente, supongo. Cuando termine el ciclo, será la última línea del archivo.

Ahora, si hay líneas que no se guardan, puede enviarlas a la matriz fallida y guardarlas en los lotes.

Sugerencia: también, en lugar de guardar cada línea en la base de datos cada vez que hay muchas solicitudes de más de 9000 (líneas), debe usar la inserción por lotes. Cuando esté fuera del circuito, puede verificar nuevamente si hay líneas que no se guardaron. Vuelva a ejecutar la función de guardado por lotes y estará listo para comenzar.

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