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

355
Visualizações
Leer y escribir archivos de 'fs' no funciona de forma asíncrona

Estoy tratando de construir un script que lea y escriba algunos archivos. Las funciones funcionan bien, pero tengo problemas para realizar las funciones de lectura/escritura de forma asincrónica. El principal problema que tengo es que estoy tratando de escribir un archivo y luego estoy tratando de importarlo. Por ejemplo: dadas estas dos funciones, la primera está escribiendo en ./myFile.js y la segunda función está tratando de importar el archivo de esta manera:

 var fs = require('fs'); const myFile = require('./myFile') async function writeMyFile() { return new Promise((resolve, reject) => { fs.promises.readFile('./myFile.js', 'utf8').then((file) => { const replacedData = file + 'newLine' fs.promises .writeFile('./myFile.js', replacedData) .then(() => resolve('Writted')) .catch(() => reject('Error')); }); }); } function importMyFile() { console.log(myFile) // this is always empty } await writeMyFile() importMyFile()

Lo que pasa es que puedo ver que myFile se está escribiendo correctamente, pero no puedo verlo en la función importMyFile . Cuando pruebo estas funciones por separado funciona (ejecutando la primera y luego la segunda)

Intenté lo siguiente:

  • Uso de las funciones de promise de la biblioteca fs : fs.promises.readFile() y fs.promises.writeFile() (ejemplo anterior)
  • Devolver una Promesa que se resuelve cuando finaliza writeMyFile . (ejemplo arriba)
  • Importando el archivo directamente en la función readMyFile de esta manera:
 function importMyFile() { const myFile = require('./myFile') console.log(myFile) // this is always empty }
  • Sin volver nueva Promesa como esta:
 async function writeMyFile() { const file = await fs.promises.readFile('./myFile.js', 'utf8') const replacedData = file + 'newLine' await fs.promises.writeFile('./myFile.js', replacedData) }

Tambien veo que en la consola, el orden de los logs son estos:

 'Writted' {} //empty file

Tenga en cuenta que esta es una versión simplificada de mi caso.

EDITAR el archivo que estoy tratando de escribir e importar se ve así SIEMPRE:

 module.exports = []

Y el que está poblado, se ve así:

 const myModule = { name: 'name', surname: 'surname' } module.exports = [myModule]

Espero que alguien sepa lo que está pasando aquí. ¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Usar require es diferente a readFile . El uso de require carga el archivo .js como un módulo y trae sus elementos exportados para usarlos en su código. Si solo está interesado en imprimir el texto dentro del archivo .js, use fs.readFileSync para hacerlo (no necesita promesas si usa la versión síncrona de la llamada).

El código que tiene agregará la cadena "nueva línea" al final del archivo, pero si su intención era agregar una nueva línea real, debería agregar "\n" en su lugar.

Una versión más simple de su código podría verse así:

 function writeMyFile() { const file = fs.readFileSync('./myFile.js', 'utf8'); const replacedData = file + '\n'; fs.writeFileSync('./myFile.js', replacedData); return 'Written'; } function importMyFile() { // actually read the file instead of using require() const file = fs.readFileSync('./myFile.js', 'utf8'); console.log(file); } writeMyFile() importMyFile()

Dado que no se realizan llamadas asincrónicas, no hay necesidad de promesas o esperas.

Si tenía la intención de usar el código .js en el interior, y es importante usar require , tenga en cuenta que una vez que lo carga de esa manera en la memoria, no se actualiza después de que cambia el archivo en el disco. Incluso si llama para require una vez más, será inteligente y dirá "oh, ya tengo ese en la memoria" y no lo recargará. Por lo tanto, retrase la llamada a require('./myFile') hasta que se realicen los cambios necesarios y coloque la instrucción require dentro de importMyFile() .

about 4 years ago · Juan Pablo Isaza Relatório

0

await writeMyFile() importMyFile()

Tiene que estar dentro de una función asíncrona.

Por ejemplo, llamándolos así, y esto debería funcionar.

 (async ()=>{ await writeMyFile() importMyFile() })()

Además, la salida, {} significa que no hay ningún módulo exportado desde myfile.js.

Editar: la variable "myFile" contiene datos antiguos. Tal como fue importado al inicio de la ejecución. importMyFile debería volver a importar myfile.js.

 function importMyFile() { myFile = require('./myFile') console.log(myFile) }

Después de esto, los nuevos cambios realizados por writeMyFile se mostrarán en la consola, si la función cambió la exportación de myfile.js .

about 4 years ago · Juan Pablo Isaza Relatório
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