Foros del Web » Programando para Internet » Javascript »

setTimeouts consecutivos

Estas en el tema de setTimeouts consecutivos en el foro de Javascript en Foros del Web. Hola derkenuke, ¿Podrías ayudarme? tengo un pequeño script con varios setTimeout, 3 concretamente, que no consigo enlazar correctamente para que cuando acabe uno se ejecute ...
  #1 (permalink)  
Antiguo 04/09/2008, 13:35
 
Fecha de Ingreso: septiembre-2008
Mensajes: 7
Antigüedad: 15 años, 7 meses
Puntos: 0
setTimeouts consecutivos

Hola derkenuke,
¿Podrías ayudarme?
tengo un pequeño script con varios setTimeout, 3 concretamente, que no consigo enlazar correctamente para que cuando acabe uno se ejecute el siguiente.

muchas gracias )
  #2 (permalink)  
Antiguo 04/09/2008, 13:38
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: aporte: programacion secuencial

Bienvenido, juliorjulior.

Para hacer preguntas es preferible que lo hagas en un nuevo tema.

Véase: http://www.forosdelweb.com/f40/polit...el-web-101485/
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 04/09/2008, 14:30
 
Fecha de Ingreso: septiembre-2008
Mensajes: 7
Antigüedad: 15 años, 7 meses
Puntos: 0
Sonrisa Respuesta: aporte: programacion secuencial

Hola el_javi,

Tengo reloj de cuenta atrás con setTimeout. Es un script sencillo. Para una vez no hay problema, pero para ejecutar una secuencia de cuenta atras de 20", después 10" y finalmente otros 20", no consigo que se ejecute secuencialmente.

Creo que la solución podría estar en la programación hecha en este tema, pero no llego a comprenderlo bien y como encajar la lógica en mi script.

muchas gracias
  #4 (permalink)  
Antiguo 04/09/2008, 14:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: aporte: programacion secuencial

No entendí lo que estás queriendo hacer, ¿podrías poner un ejemplo claro?.

Porque si lo que quieres es sólo hacer 3 setTimeout(), solo espera a que se ejecute el primero para llamar al segundo y después al tercero.

P.S.: Como ya te dije, es aconsejable que crees un nuevo tema para nuevas consultas, ten eso en cuenta para la próxima vez .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 04/09/2008, 15:05
 
Fecha de Ingreso: septiembre-2008
Mensajes: 7
Antigüedad: 15 años, 7 meses
Puntos: 0
Sonrisa Respuesta: aporte: programacion secuencial

Hola David,

He intentado hacer lo que dices pero no se que estoy haciendo mal.

La secuencia que tiene que aparecer en pantalla es 20 seg, despues contar 10 seg. y finalmente otros 20 y acabar.

¿Cómo hago para enlazar 3 setTimeout secuencialmente?

muchas gracias
  #6 (permalink)  
Antiguo 04/09/2008, 15:10
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: aporte: programacion secuencial

¿Cómo intentaste hacerlo?. Coloca el código con que estás intentando para que veamos cuál es el error.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 04/09/2008, 15:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 7
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: aporte: programacion secuencial

Hola David,

os mando con lo que estoy trabajando. He quitado todo lo que estaba probando porque revisando la ejecucion con firefox (firebug) me fallaba. Ahora solo calcula una cuenta atras y no se como cambiar la logica.
He probado incluyendo las siguientes llamadas despues de showCountDown() en la funcion startTimer3h pero no funciona.

muchas gracias.

julior )

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Temporizador de cuenta atrás</title>
<style type="text/css">
<!--
body {
font: 100% Verdana, Arial, Helvetica, sans-serif;
background: #777777;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
#contenedor {
margin-top: 60px;
width:100%;
margin: 0 auto;
}
#formulario {
height:auto;
width:auto;
}
#formDigitos {
font-size: 500%; /*1800 es el valor final posible */
font-style: normal;
font-family: LED, LEDFont, LcdD;
text-align:center;
/*font-weight:bold;*/
font-stretch: expanded;
/* color: #EDFEFE;*/
/*color: #F0F8FF;*/
color: #c3c3c3;
/*font-weight: bolder;*/
background-color: transparent;
border-color: transparent;
border: 0;
width:500;
height:280;
}

</style>
<script languaje="JavaScript">
<!--
var running = false
var endTime = null
var timerID = null
// var showhour = true
var showhour = false // ahora asi para probar 20

//calculos de milisegundos para calcular horas y minutos
var unMinuto = 60 * 1000
var unaHora = unMinuto * 60

function startTimer3h() {

running = true
now = new Date()
now = now.getTime()


endTime = now + (1000 * 10) //prueba
showCountDown()
}

function showCountDown() {
var now = new Date()
now = now.getTime()

if (endTime - now <= 0) {
stopTimer()
alert ("Fin de la cuenta atrás...")
} else {
var delta = new Date(endTime - now)
var theHor = delta.getHours()
var theMin = delta.getMinutes()
var theSec = delta.getSeconds()

if (!showhour) {
var theTime = theMin
} else {
var theTime = theHor
theTime += ((theMin < 10) ? ":0": ":") + theMin
}
theTime += ((theSec < 10) ? ":0": ":") + theSec

document.forms[0].timerDisplay.value = theTime
if (running) {
timerID = setTimeout("showCountDown()",1000)
}
}
}

function stopTimer() {
// alert ("vamos a parar...")
clearTimeout(timerID)
running = false
document.forms[0].timerDisplay.value = "00:00"
}
//-->
</script>

</head>

<body>
<div id="contenedor">
<h3>Cuenta atrás 10 segundos + 5 segundos + 10 segundos</h3></br>
<form id="formulario">
<input type="button" name="startTime" value="Comenzar" onClick="startTimer3h()">
<input type="button" name="clearTime" value="borrar contador" onClick="stopTimer()"></br></br>
<input size="3" id="formDigitos" type="text" name="timerDisplay" value=""> </br></br>

</form>

<!-- FIN id="contenedor">--></div>



</body>
</html>
  #8 (permalink)  
Antiguo 04/09/2008, 16:54
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: aporte: programacion secuencial

Hola:

Es un hilo muy viejo, y no sabía lo que eran los closures, así que probablemente podría mejorar el código ahora mismo.

Si tienes que hacer 20 segundos, después 10 y luego otros 20 lo más cómodo es llamar directamente al de 20, y programar un setTimeout para las acciones siguientes dentro de 10 y 30 segundos respectivamente. A ver si con esto lo entiendes mejor. Al inicio de la aplicación ejecutaríamos estas 3 cosas:
  • Llamamos a f1() que está 20 segundos ejecutándose
  • Ponemos un setTimeout para f2() para que se ejecute dentro de 20 segundos (y sabemos que durará 10).
  • Ponemos otro setTimeout para f3() para que se ejecute dentro de 30 segundos (1º+2º = 20''+10'' = 30'')
Al inicio se ejecutará f1(), que tardará 20 segundos. Al de 20 segundos del inicio se ejecutará f2(), que a su vez tardará 10 segundos más. Después de esos 10 segundos (30 segundos desde el inicio) se ejecutará finalmente f3().


Es cómodo si sabes cuánto van a durar las funciones. Sino es muuucho más complicado, hay que jugar con una variable que habría que comprobar si cambia de estado cada muy poco (que es básicamente lo que hacía mi comprobarSi()).


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 08/09/2008, 12:17
 
Fecha de Ingreso: septiembre-2008
Mensajes: 7
Antigüedad: 15 años, 7 meses
Puntos: 0
Sonrisa Respuesta: setTimeouts consecutivos

Hola derkenuke, muchas gracias por tu aportación.

saludos )
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 13:50.