Adler
Estoy tratando de escribir código simple con un setTimeout
pero el setTimeout
simplemente no esperará el tiempo que se supone que debe hacerlo y el código se ejecuta de inmediato. ¿Qué estoy haciendo mal?
setTimeout(testfunction(), 2000);
Estera
Está llamando a la función de inmediato y programando su valor de retorno.
Usar:
setTimeout(testFunction, 2000);
^
Aviso: sin padres.
-
ok, gracias… pero ¿hay alguna manera de enviar parámetros a la función como setTimeout(testFunction(obj),2000)??! por cierto, esto tampoco funcionará setTimeout(alert(“test”),2000)..
– Adler
21 de agosto de 2011 a las 9:24
-
@Adler: Sí:
setTimeout(function() { alert("test"); }, 2000);
–TJ Crowder
21 de agosto de 2011 a las 9:25
-
@Adler: Es posible hacer
setTimeout(alert, 2000, "test")
pero no es compatible con IE.– pimvdb
21 de agosto de 2011 a las 9:26
-
@Adler: Ver también: stackoverflow.com/questions/1190642/…
– Estera
21 de agosto de 2011 a las 9:27
José Faeti
quitar el paréntesis
setTimeout(testfunction(), 2000);
Si desea enviar parámetros a la función, puede crear una función anónima que luego llamará a la función deseada.
setTimeout(function() {
testfunction('hello');
}, 2000);
Editar
Alguien sugirió enviar una cadena como primer parámetro de setTimeout. Sugeriría no seguir esto y nunca enviar una cadena como primer parámetro setTimeout, porque se usará la función eval. Esta es una mala práctica y debe evitarse si es posible.
Emil Vikström
Eliminar los paréntesis después de la testfunction
nombre:
setTimeout(testfunction, 2000);
La razón es que el primer argumento para setTimeout
debería ser una función referencia, no el valor de retorno de la función. En tu código, testfunction
se llama inmediatamente y el valor devuelto se envía a setTimeout
.
-
ok, gracias… pero ¿hay alguna manera de enviar parámetros a la función como setTimeout(testFunction(obj),2000)??! por cierto, esto tampoco funcionará setTimeout(alert(“test”),2000)…
– Adler
21 de agosto de 2011 a las 9:24
-
@Adler sí, puede pasar todos sus argumentos después del argumento de retraso, así:
setTimeout(testFunction, 2000, obj)
– Brandon McConnell
29 mayo 2021 a las 19:31
Shubham Arya
Veo muchas respuestas aquí, pero solo quiero tomarme un tiempo para explicar la causa raíz del problema.
En realidad, la función setTimeOut() es una función asíncrona y cuando pasa una función como uno de los parámetros a la función setTimeOut(), su secuencia de comandos en realidad no quiere perder el tiempo y quiere ejecutar la función pasada lo antes posible.
Entonces, hay algunas formas en que puede evitar esto. Puede usar devoluciones de llamada o promesas.
Consulte este enlace para obtener detalles rápidos: https://www.w3schools.com/js/js_promise.asp
Le mostraré cómo puede usar la devolución de llamada para lograr lo que desea lograr.
Haciendo –
setTimeOut(your_function_name_without_parentheses, <number of milliseconds>)
De hecho, puede decirle a su tiempo de espera que se ejecute primero y luego ejecute mi función de devolución de llamada pasada como el primer parámetro.
O si desea pasar un parámetro a la función de devolución de llamada, puede hacer algo como esto:
setTimeOut(() => {your_function_name_with_parentheses(argument_that_you_want_to_pass), <number of milliseconds>})
También hay otras formas que ya se respondieron anteriormente.
Además, soy un novato en JS, avíseme si hay lagunas en mi comprensión.
Shraddha
Primero quita el paréntesis:
setTimeout(testfunction, 2000);
Y luego, si desea pasar parámetros en setTimeout
función, se puede pasar de esta manera:
setTimeout(testfunction, 2000, param1, param2);
Nota: Puede pasar varios parámetros según los requisitos de su función.
shailu
Bueno, es posible que haya obtenido la respuesta, pero estoy explicando la causa y la solución. Hay dos formas en las que puede llamar a una función después de la cantidad de tiempo requerida.
1. setTimeout(“FUNC_NAME ()’, TIME_IN_MS);
Aquí FUNC_NAME entre comillas dobles es la función original que desea llamar después de TIME_IN_MS milisegundos. Esto se debe a que si no pone las comillas, mientras se interpreta el script Java, la función se ejecutará inmediatamente y su propósito se verá frustrado. Para permitir que el intérprete omita la declaración, debemos poner comillas aquí.
2. setTimeout(función () {FUNC_NAME ()}, TIME_IN_MS);
Aquí se crea una función anónima que le dice al intérprete que ejecute si después de cierto tiempo en lugar de evaluar el tiempo.
gracias
Jonathan Utsu Undelikwo
Elimine el paréntesis, actualmente está invocando la función de inmediato. Lo que se pasa actualmente a setTimeout es el valor devuelto por la llamada testfunction(), pero lo que debe pasar a setTimeout como primer argumento es una referencia de función
setTimeout(testfunction, 2000);
-
Gracias por la contribución, pero explique cómo esto agrega algo a las respuestas existentes que han existido durante una década.
– ggorlen
31 de julio de 2021 a las 18:33
()
actúa aquí como un operador de invocación. Pero quieres pasar la función asetTimeout
no invocarlo.– Sime Vidas
21 de agosto de 2011 a las 9:24
Dup de ¿Por qué mi llamada de función programada por setTimeout se ejecuta de inmediato?, Llamar a funciones con setTimeout(), Javascript setTimeout() ignora la duración del tiempo de espera
– fuera
9 de noviembre de 2011 a las 21:43