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

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

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 Report

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 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!