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

254
Views
¿Por qué el código no se ejecuta después de las funciones asíncronas de clase?

El caso es que tengo una clase que valida los valores y los resultados deben generarse con el método document.getElementById().innerHTML. Sin embargo, la segunda parte de mi lógica funciona solo después de hacer doble clic en el botón 'enviar'. Aquí el código del archivo principal:

 obj = new Validation() async function validate(){ await obj.api_secret_key(); await obj.currency(); await obj.quantity(); await obj.pnl(); } function start(){ let error_handler = ''; for (i in obj.validation_dict){ if (obj.validation_dict[i] === 'error'){ error_handler = i; break; } } if (error_handler !== ''){ error_msg = ` <p>Some parameters set improperly!</p> <p>Please, check ${error_handler}.</p> `; console.log(error_msg); document.getElementById('terminal').innerHTML = error_msg; } else { document.getElementById('terminal').innerHTML = "Successful connection!"; } } jQuery('#btn_start').on('click',async function(){ validate(); start(); });

No he representado la clase de validación porque hay muchos archivos (2 python, 1 js). La clase tiene una variable donde almacena los resultados (error, advertencia, éxito):

 this.validation_dict = { 'keys' : "not set", 'currency': "not set", 'quantity': "not set", 'pnl': "not set" };

Todas las funciones de la clase son asíncronas para poder esperar la ejecución de la parte del servidor (módulo anguila):

 async quantity() { let quantity = document.getElementById("input_quantity").value; let result = await eel.quantity_input(quantity)(); this.setter_status('quantity', result); if (result.indexOf("[ERROR]") == -1) this.info_account['quantity'] = quantity; }

Probablemente, olvidé agregar que si declaro la función start() como método de clase, entonces funciona bien. Como vio, la clase solo para validación, por lo tanto, declarar el método de clase no es una salida.

Alguna adición de la validación: await eel.quantity_input(quantity)(); hace el proceso y lo crea el módulo anguila en Python:

 import eel @eel.expose def quantity_input(qty=""): is_valid = validation_obj.quantity_checker(qty=qty) print(is_valid) return is_valid

Entra en la función:

 def quantity_checker(self, qty = ""): qty = float(qty) if qty < 10: return "[ERROR] The quantity is lower 10 dollars" return "[SUCCESS] The quantity is right"
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

No está esperando a que validate() finalice antes de llamar a start() , por lo que verá el estado inicial de obj.validation_dict (o el estado resultante del clic anterior), antes de que se modifique de forma asíncrona. Cambia tu código a

 jQuery('#btn_start').on('click', async function(){ await validate(); // ^^^^^ start(); });
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!