Foros del Web » Programando para Internet » Javascript »

settimeout sobre función que llama a función no funciona

Estas en el tema de settimeout sobre función que llama a función no funciona en el foro de Javascript en Foros del Web. Tengo una función que llama a otra función, este proceso se realiza correctamente. Ahora quiero darle el efecto de que el pc está pensando... haciendo ...
  #1 (permalink)  
Antiguo 27/04/2012, 12:44
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
settimeout sobre función que llama a función no funciona

Tengo una función que llama a otra función, este proceso se realiza correctamente.

Ahora quiero darle el efecto de que el pc está pensando... haciendo que tarde desde que se pincha el botón que llama a la función hasta que el ordenador ofrece una respuesta.

function juegamaquina(n){
setTimeout(jugar(combinaciones(n)),1000);
}

Pues bien... no llega a esperar esos 1000 milisegundos, la función:
jugar(combinaciones(n)) la hace de inmediato.

Alguien sabe por qué? Es porque tantas cosas dentro de otras se arma un lio? Jajajaja

---

PD: Acabo de descubrir la utilidad de dreamweaver para escribir y corregir código javascript... y según parece la sintaxis está correcta (es decir, no falta ni sobra paréntesis, ni falta ni sobra punto y coma... etc.

Última edición por Kritik; 27/04/2012 a las 12:52
  #2 (permalink)  
Antiguo 27/04/2012, 12:55
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: settimeout sobre función que llama a función no funciona

settimeout espera un callback, no la respuesta de una funcion, por ello se ejecuta, debes de pasar el nombre de la función en cadena
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 27/04/2012, 17:33
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: settimeout sobre función que llama a función no funciona

no hay más líneas en la función...

es un código con múltiples funciones, esa que he puesto es la primera.

Sin el settimeOut, jugar(combinaciones(n)) es una simple llamada a función, solo q en este caso el valor que manda a la función jugar es el sacado de la función combinaciones(n).

Sin el settimeout la cosa funciona perfectamente. Luego le pongo el settimeout con de la forma habitual , osea... settimeout(instruccion,tiempo).

Cuando lo hago con una función normal funciona bien, pero no cuando dicha función tiene dentro otra.
  #4 (permalink)  
Antiguo 27/04/2012, 18:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: settimeout sobre función que llama a función no funciona

consulte la documentación sobre setTimeout, ya le indique que lo que está haciendo es pasar al setTimeout la salida de la función jugar() y no el callback de la misma
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 28/04/2012, 12:40
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: settimeout sobre función que llama a función no funciona

Según la web "http://www.w3schools.com/js/js_timing.asp" la sintaxis es la siguiente.

var t=setTimeout("javascript statement",milliseconds);

Y en su ejemplo...

<html>
<head>
<script type="text/javascript">
function timeMsg()
{
var t=setTimeout("alertMsg()",3000);
}
function alertMsg()
{
alert("Hello");
}
</script>
</head>

<body>
<form>
<input type="button" value="Display alert box in 3 seconds" onclick="timeMsg()" />
</form>
</body>
</html>

Fijándome en la línea del SetTimeout...

var t=setTimeout("alertMsg()",3000);

He modificado este mismo código para mandar una variable en la función...

<html>
<head>
<script type="text/javascript">
function timeMsg(msg)
{
var t=setTimeout("alertMsg(msg)",3000);
}
function alertMsg(msg)
{
alert(msg);
}
</script>
</head>

<body>
<form>
<input type="button" value="Display alert box in 3 seconds" onclick="timeMsg("Hello");">
</form>
</body>
</html>

Y no me ha funcionado, el botón deja de actuar y no hace nada. Deduzco entonces que la función no puede mandar valores si se hace con el setTimeout.

Si no puedo mandar valores en al función, no me sirve. En mi código me da igual, pues lo quería para crear el efecto de que el ordenador tarda porque está funcionando y calculando (pensando). Así que lo hago sin el setTimeout y no pasa nada. Pero me ha resultado raro que esto no se pueda hacer.

Última edición por Kritik; 28/04/2012 a las 12:51
  #6 (permalink)  
Antiguo 17/05/2012, 16:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 1
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: settimeout sobre función que llama a función no funciona

Prueba con esto, te va a funcionar:

<html>
<head>
<script type="text/javascript">
function timeMsg(msg)
{
var t=setTimeout("alertMsg('"+msg+"')",500);
}
function alertMsg(msg)
{
alert(msg);
}
</script>
</head>

<body>
<form>
<input type="button" value="Display alert box in 0.5 seconds" onclick="timeMsg('hello');">
</form>
</body>
</html>
  #7 (permalink)  
Antiguo 17/05/2012, 16:25
 
Fecha de Ingreso: julio-2009
Ubicación: La Plata
Mensajes: 233
Antigüedad: 14 años, 8 meses
Puntos: 8
Respuesta: settimeout sobre función que llama a función no funciona

O bien

Código Javascript:
Ver original
  1. var t=setTimeout("alertMsg(msg)",500,'Hola Mundo');
  #8 (permalink)  
Antiguo 17/05/2012, 17:06
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 10 meses
Puntos: 343
Respuesta: settimeout sobre función que llama a función no funciona

Que es una forma no recomendada.
__________________
blog | @aijoona

Etiquetas: llama, settimeout
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:38.