estoy haciendo un bot de whatsapp, estoy guardando los chats en un archivo de excel (estoy usando exceljs) para leer y manejar algunas respuestas, prefiero usar promesas y resolverlas, tengo una función para leer chats:
const readChat = (number, message, step = null) => new Promise((resolve, reject) => { setTimeout(() => { number = number.replace("@c.us", ""); number = `${number}@c.us`; const pathExcel = `./chats/${number}.xlsx`; const workbook = new ExcelJS.Workbook(); const today = moment().format("DD-MM-YYYY hh:mm"); if (fs.existsSync(pathExcel)) { const workbook = new ExcelJS.Workbook(); workbook.xlsx .readFile(pathExcel) .then(() => { const worksheet = workbook.getWorksheet(1); const lastRow = worksheet.lastRow; let getRowInsert = worksheet.getRow(++lastRow.number); getRowInsert.getCell("A").value = today; getRowInsert.getCell("B").value = message; if (step) { getRowInsert.getCell("C").value = step; } getRowInsert.commit(); workbook.xlsx .writeFile(pathExcel) .then(() => { const getRowPrevStep = worksheet.getRow(lastRow.number); const lastStep = getRowPrevStep.getCell("C").value; resolve(lastStep); }) .catch((err) => { console.log("ERR", err); reject("error"); }); }) .catch((err) => { console.log("ERR", err); reject("error"); }); } else { const worksheet = workbook.addWorksheet("Chats"); worksheet.columns = [ { header: "Fecha", key: "number_customer" }, { header: "Mensajes", key: "message" }, { header: "Paso", key: "step" }, ]; step = step || ""; worksheet.addRow([today, message, step]); workbook.xlsx .writeFile(pathExcel) .then(() => { resolve("STEP_1"); }) .catch((err) => { console.log("Error", err); reject("error"); }); } }, 1000); });pero el código después de eso me da el error: ERR Error: se alcanzó el final de los datos (longitud de datos = 0, índice solicitado = 4). ¿Zip corrupto?, el resto, se supone que debe ejecutarse cuando no hay un Excel guardado con ese chat. He buscado en muchas preguntas y páginas, pero no he encontrado ninguna solución.
Creo que obtendría este error después de detener su ejecución en el medio, es decir, cuando el archivo se actualiza y esto corrompería el archivo de Excel.
Podría intentar agregar un "intento de captura" alrededor del archivo de lectura en su condición if y crear una nueva copia del libro de trabajo cada vez que obtenga estos errores particulares ('Se alcanzó el final de los datos (longitud de datos = 0, índice solicitado = 4). ¿Zip corrupto? ' o 'Archivo no encontrado:')