Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

308
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!