Foros del Web » Programando para Internet » Javascript »

setTimeout

Estas en el tema de setTimeout en el foro de Javascript en Foros del Web. tengo este siguiente extracto de código, en el cual deberían generarse 1 primero y después el otro (según el orden que le tengo en el ...
  #1 (permalink)  
Antiguo 07/11/2012, 13:39
Avatar de aRTeX  
Fecha de Ingreso: mayo-2005
Mensajes: 374
Antigüedad: 18 años, 10 meses
Puntos: 0
setTimeout

tengo este siguiente extracto de código, en el cual deberían generarse 1 primero y después el otro (según el orden que le tengo en el código) al cabo de x segundos. pero me sucede que los 2 se ejecutan al mismo tiempo.

como lo puedo hacer para soluciar este dilema?
Código:
setTimeout('$("#dialogImpresionGeneral").dialog("close")',1000);
setTimeout(window.open(href,'Certificado','width=0,height=0'),5000);
saludos y gracias.
  #2 (permalink)  
Antiguo 07/11/2012, 14:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: setTimeout

lo que ocurre es que al hacer un timeout creas un hilo que corre de forma independiente al flujo de datos, es decir con cada setTimeout creas una tarea, que se ejecutará luego de x tiempo, pero esta tarea se vuelve independiente.

Si necesitas que se haga una después de otra, la primer tarea deberá llamar a la segunda una vez que finalice.
  #3 (permalink)  
Antiguo 07/11/2012, 17:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: setTimeout

buenas...
en realidad, se supone que primero se interprete la segunda línea y luego al cabo de un segundo la primera línea. ¿por qué? el código a interpretar de la primera línea está dentro de un string, mientras que la segunda línea está fuera de un string. cuando le pasas un string a setTimeout, javascript lo evalua (eval) y lo convierte como si fuera una función. en cambio, si le pasas directamente instrucciones (como la segunda línea), javascript lo interpreta al momento y el resultado de esa operación es devuelta a setTimeout como la operación a ejecutarse luego de transcurrido el tiempo indicado. en tu ejemplo, estaría ejecutando un objeto Window ya que eso es lo que devuelve self.open, que al fin y al cabo no reproduce ningún resultado. la otra modalidad es pasarle como argumento a setTimeout una función. en dicho caso, setTimeout invoca la función cuando transcurre el tiempo. en el siguiente ejemplo nótese el orden en que se declara los timer y orden en que ejecuta el contenido.

Código:
setTimeout("alert('primer timer declarado, se muestra segundo');", 5000);
setTimeout(function(){
alert('segundo timer declarado, se muestra primero');
}, 1000);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: 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 04:40.