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

320
Visualizações
¿Por qué estas variables no mantienen valor?

Tengo dos problemas que no puedo resolver. Cuando llamo a GetParams primero para obtener los valores definidos usados de un archivo de texto, la línea de código después de que se llama primero, o se informa a la consola antes de recuperar los datos de la función. Cualquier dato recopilado en esa función es nulo y sin efecto. Claramente, a las variables se les asignan datos, pero después de que la llamada a la función desaparece.

 let udGasPrice = 0; let udGasLimit = 0; let udSlippage = 0;

Quiero obtener datos de un archivo de texto y asignarlos a variables que deben ser globales. puede ser asignado en una función pero usado fuera de ella. Entonces, arriba está lo que estaba haciendo para declararlos fuera de la función. porque si los declaro adentro, pierdo alcance. No parece correcto declarar con 0 y luego reasignar, pero ¿de qué otra manera puedo declararlos globalmente para que sean manipulados por otra función?

a continuación, se llama al código para que la función haga el trabajo

 GetParams(); console.log('udGasPrice = " + udGasPrice );

El código después de GetParams informa 0 pero dentro de la función los valores son correctos

Los datos se leen y asignan claramente dentro de la función. No es bonito ni inteligente, pero funciona.

 function GetParams() { const fs = require('fs') fs.readFile('./Config.txt', 'utf8' , (err, data) => { if (err) { console.error(err) return; } // read file contents into variable to be manipulated var fcnts = data; let icnt = 0; for (var x = 0; x < fcnts.length; x++) { var c = fcnts.charAt(x); //find the comma if (c == ',') { // found the comma, count it so we know where we are. icnt++; if (icnt == 1 ) { // the first param udGasPrice = fcnts.slice(0, x); console.log(`udGasPrice = ` + udGasPrice); } else if (icnt == 2 ) { // second param udGaslimit = fcnts.slice(udGasPrice.length+1, x); console.log(`udGaslimit = ` + udGaslimit); } else { udSlippage = fcnts.slice(udGaslimit.length + udGasPrice.length +2, x); console.log(`udSlippage = ` + udSlippage ); } } } }) }

Como dije, sé que el algoritmo es deficiente, pero funciona (soy muy novato), pero ¿por qué las variables no retienen el valor y por qué el código después de GetParams() se ejecuta primero? Gracias por tu tiempo.

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

0

El código se ejecuta antes de que finalice el método GetParams, porque lo que hace es un trabajo asíncrono. Puede verlo mediante el uso de una función de devolución de llamada cuando se lee el archivo.

Como práctica recomendada, debe proporcionar una devolución de llamada a GetParams y llamarlo con los resultados del archivo o usar un enfoque más moderno mediante la adopción de promesas y (opcionalmente) la sintaxis async/await.

about 4 years ago · Juan Pablo Isaza Relatório

0

fs.readFile lee de forma asincrónica todo el contenido de un archivo. Por lo tanto, su console.log('udGasPrice = " + udGasPrice ); no esperará la función GetParams .

Las posibles soluciones son:

  1. Usar devolución de llamada o promesa

     let udGasPrice = 0; let udGasLimit = 0; let udSlippage = 0; GetParams(() => { console.log("udGasPrice = " + udGasPrice); }); function GetParams(callback) { const fs = require('fs') fs.readFile('./Config.txt', 'utf8', (err, data) => { if (err) { console.error(err) return; } // read file contents into variable to be manipulated var fcnts = data; let icnt = 0; for (var x = 0; x < fcnts.length; x++) { var c = fcnts.charAt(x); //find the comma if (c == ',') { // found the comma, count it so we know where we are. icnt++; if (icnt == 1) { // the first param udGasPrice = fcnts.slice(0, x); console.log(`udGasPrice = ` + udGasPrice); } else if (icnt == 2) { // second param udGaslimit = fcnts.slice(udGasPrice.length + 1, x); console.log(`udGaslimit = ` + udGaslimit); } else { udSlippage = fcnts.slice(udGaslimit.length + udGasPrice.length + 2, x); console.log(`udSlippage = ` + udSlippage); } } } callback() }) }
  2. fs.readFileSync (ruta [, opciones]) : realiza la misma operación sincronizada; aún necesita editar su código en consecuencia

Además, es recomendable que no edite variables globales en la función y devuelva variables actualizadas desde la función.

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