• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

385
Views
Cómo pasar variables cuando se usa JS setTimeout()

Estoy usando clippy.js para hacer que los personajes en la ventana gráfica hablen a través de un globo. Me gustaría que los personajes hablen textos en una secuencia pasando elementos en una matriz que contiene los diferentes textos con un retraso entre pronunciar los textos. Para esto, estoy usando un bucle for con un retraso específico entre los pasajes del texto. Esa parte funciona bien con setTimeout(), pero, probablemente debido a la naturaleza asíncrona de JS, solo se pasa a la función la última variable de texto. Aquí está el fragmento de código:

 for (n=0;n<4;++n){ x = tmptext[n]; setTimeout(() => {agent.speak(x);}, 5000 + n*5000); }

tmptext[] es una matriz que contiene los diferentes textos, y cagent.speak() es la función para hacer que el personaje hable un texto, que por lo demás funciona bien. El problema es que el personaje solo habla el último texto de la matriz 4 veces aunque lo hace con el tiempo adecuado entre ellas. Claramente, la función se ejecuta 4 veces usando solo el valor de la variable x como se le asignó en la última iteración en el ciclo for (que es el valor de x=tmptext[3] en este caso).

Si uso la matriz tmptext[] directamente, no obtengo ningún texto que pase de esta matriz a la función. Por ejemplo,

 for (n=0;n<4;++n){ setTimeout(() => {agent.speak(tmptext[n]);}, 5000 + n*5000); }

Aquí, no se pasa texto como confirmado mediante el uso de alerta en la función cagent.speak() para monitorear esto y, de hecho, el globo aparece vacío 4 veces. Esto se debe a que el valor de n que se está utilizando es su último valor en la iteración, lo que lo convierte en 5 y más allá del alcance de la matriz.

La naturaleza asíncrona de JS parece ser el problema aquí y no estoy familiarizado con el manejo de eso. ¿Cómo paso el valor de cada elemento de la matriz a la función con el tiempo adecuado en el medio? Agradecería ayuda aquí.

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Este código resolvió el problema:

 for (n=0;n<4;++n){ let x = tmptext[n]; setTimeout(() => {agent.speak(x);}, 5000 + n*5000); }
almost 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error