Estoy tratando de almacenar algunos datos en un grupo de archivos PDF usando Puppeteer. Pero cuando trato de ejecutar este código, mi aplicación se congela y asumo que estoy haciendo algo mal con el código asíncrono y en espera. Parece estar funcionando correctamente, los documentos se crean correctamente en la carpeta del proyecto, pero en algún momento el nodo falla y debo reiniciar mi PC.
const path = require("path"); const puppeteer = require("puppeteer"); const fs = require('fs'); for (let index = 0; index < documentsToPDF.length; index ++) { const result = await generatePDF(documentsToPDF[index]); await createAndSavePDFInFile(documentsToPDF[index], result); } async function generatePDF(browser, numdoc) { const filePage = await browser.newPage(); filePage.setDefaultNavigationTimeout(0); await filePage.goto(renderPath(numdoc), { waitUntil: "networkidle0", }); return filePage.pdf({ format: "A4", }); } async function createAndSavePDFInFile(numdoc, result) { console.log(result); if(result) { return fs.writeFile( path.join(__dirname, `../results/result-${numdoc}.pdf`), result, (error, result) => { if(error) console.log('error', err); else console.log(`PDF result-${numdoc}.pdf `); } ); } else { console.log(`numdoc `, numdoc, ' could not be saved into pdf'); } }
Gracias por su ayuda, soy nuevo en node y estoy aprendiendo :)
EDITAR:
Este bucle ahora funciona bien
for (let index = 0; index < documentsToPDF.length; index += 1) { const browser = await puppeteer.launch(puppeteerParams); const result = await generatePDF(browser,documentsToPDF[index]); await createAndSavePDFInFile(documentsToPDF[index], result); browser.close(); console.log('Exp: ', documentsToPDF[index], ' SUCCESS'); }
Pero puedo hacer algo como esto?
const pdfPromises = []; for (let index = 0; index < documentsToPDF.length; index += 1) { pdfPromises.push(createPdf(puppeteer, puppeteerParams, documentsToPDF[index])) } await Promise.all(pdfPromises); async function createPdf(puppeteer, puppeteerParams, numexp) { const browser = await puppeteer.launch(puppeteerParams); const result = await generatePDF(browser, numexp); await createAndSavePDFInFile(numexp, result); browser.close(); console.log('Exp: ', numexp, ' SUCCESS'); }
Lo he probado y me devuelve este error:
MaxListenersExceededWarning: se detectó una posible pérdida de memoria de EventEmitter. Se agregaron 11 detectores de eventos. Utilice emitter.setMaxListeners() para aumentar el límite.