Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

260
Visualizações
Node.js escribe en un archivo y luego el archivo está vacío

Mi programa Node.js está trabajando en una larga lista de tareas, por lo que estoy guardando el progreso como una cantidad de tareas procesadas en un archivo .JSON para realizar un seguimiento. En aproximadamente el 90 % de los casos, todo está bien, pero rara vez el programa genera un archivo .JSON vacío. Intenté buscar nulo y una cadena vacía, pero no funcionó. El error todavía no se lanza al escribir, sino en la próxima lectura. Estoy confundido acerca de escribir un archivo vacío, porque de la forma en que lo entiendo, incluso si se recibe un valor no válido para procesado_tasks_num, entonces solo un valor en el JSON debería ser incorrecto y la estructura JSON en sí sigue intacta.

Pregunta: ¿Cómo puedo evitar que mi función update_settings produzca un archivo vacío? Tanto lanzar como atrapar el error estaría bien.

Nodo v14.17.3; Sistema operativo Windows 10 Business 21H2

 export async function update_settings(logs_category, logs_event, processed_tasks_num) { let path "C:\\Users\\MyUser\\MyLogsFolder\\ProgramSettings" + "-" + logs_category + ".json"; // Checks for invalid values of processed_tasks_num if (typeof processed_tasks_num === "undefined" || processed_tasks_num.length === 0) { throw new RangeError("processed_tasks_num < start_tasks_num at " + logs_category); } // readFile from JSON file at path async function read_settings(callback) { // any async callback invokes callback with response fs.readFile(path,async (err, data) => { if (err) return callback(err); return callback(null, data); }); } // JSON.parse(data), update one value, writeFile to same path return new Promise((resolve => { read_settings(function edit_settings(err, data) { // process the async result let settings_obj = JSON.parse(data); settings_obj[logs_category][logs_event].start_tasks_num = processed_tasks_num; let settings_json = JSON.stringify(settings_obj, null, 2); if (settings_json === null || settings_json === "") { return new Error("empty settings_json at update_settings(), setting_json: "+settings_json); } fs.writeFile(path, settings_json, (err) => { if (err) throw err; resolve(0); }) }); })) }

La función siempre se llama con await como

 await update_settings(logs_category, logs_event, processed_tasks_num);

Cualquier ayuda o sugerencia para encontrar una solución es muy apreciada. Gracias.

UPDATE1: Creo que este error se produce porque la función update_settings se llama desde diferentes puntos de mi programa de manera no determinista. Entonces, teóricamente, una llamada de función podría cruzarse con otra. Hasta ahora, pensé que esto se evitaría por la forma en que funciona el ciclo de eventos de Node, porque todas las llamadas de update_settings a un archivo se realizan mediante el mismo proceso de Node. Ahora estoy cuestionando este entendimiento.

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda