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

202
Visualizações
¿Cómo leer un archivo (¿sincrónicamente?) en un ciclo while en javascript (Discord.js)?

Esta es posiblemente una pregunta duplicada, pero parece que no puedo resolverlo.

Esencialmente, estoy creando un código que se ejecuta en un ciclo while donde luego necesito leer un archivo dentro de ese ciclo while, y parece que fileRead en el código simplemente evita que el ciclo while llegue al final. Todavía soy bastante novato en javascript, por lo que probablemente sea una solución fácil.

Lo que he intentado hasta ahora es cambiar mi función jsonReader para sincronizar (readFileSync) y eso simplemente detuvo el código antes de que casi no hiciera nada. (así es como es el código actual) También intenté crear una segunda función para leer específicamente los archivos que necesito de forma sincronizada y tampoco pareció funcionar. Ni siquiera estoy seguro de si esto tiene que ver con el sincronismo.

Mi código:

 module.exports = { name: 'xprun', description: "runs the xp handler", execute(message) { const name = message.author.username; const server = message.guild.id; const fs = require('fs'); function jsonReader(filePath, cb) { fs.readFileSync(filePath, 'utf-8', (err, fileData) => { if (err) { return cb && cb(err); } try { const object = JSON.parse(fileData); return cb && cb(null, object); } catch (err) { return cb && cb(err); } }); } console.log('Starting the loop...'); // var run = true; var i = 0; while (run == true) { i++ console.log('Running the loop...'); // Loop stops and re-runs here // read #1 jsonReader(`./userData/rank/${server}_server/1.json`, (err, data) => { if (err) { console.log(err); } else { console.log(data.id); // } // read #2 jsonReader(`./userData/xp/${server}_server/${name}_xp.json`, (err, data) => { if (err) { console.log(err); } else { console.log(data.rank); // } console.log('The loop was completed'); // if (i >= 5) { run = false; } }); // end read #1 }); // end read #2 } // end while console.log('The loop was ended'); // } // end execute } // end
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Como @CherryDT mencionó en los comentarios, readFileSync no acepta una devolución de llamada. Debido a que readFileSync es síncrono, no necesita una devolución de llamada; readFile acepta una devolución de llamada solo porque es asíncrona, porque necesita esperar hasta que haya leído el archivo antes de llamar al código en la devolución de llamada. El método sincrónico no necesita esperar de esta manera, por lo que puede mover el código de devolución de llamada fuera de la devolución de llamada de la siguiente manera:

 function jsonReader(filePath, cb) { try { const fileData = fs.readFileSync(filePath, 'utf-8'); const object = JSON.parse(fileData); return cb && cb(null, object); } catch (err) { return cb && cb(err); } }

La razón por la que su ciclo se estaba ejecutando infinitamente fue porque configuró run en false solo dentro de su método cb de devolución de llamada, pero debido a que readFileSync no acepta una devolución de llamada, su devolución de llamada nunca se ejecutó. Con el código anterior, su devolución de llamada ahora debería estar ejecutándose, y el ciclo ya no debería ejecutarse infinitamente (a menos que haya otros problemas dentro de sus devoluciones de llamada).

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