Foros del Web » Programando para Internet » Javascript »

Javascript no espera a nadie.. Help!

Estas en el tema de Javascript no espera a nadie.. Help! en el foro de Javascript en Foros del Web. Bueno maestros resulta que me he topado con un problema que ya conozco, nunca intente solucionarlo, siempre busque vias alternas, pero me entre en curiosidad ...
  #1 (permalink)  
Antiguo 01/03/2010, 13:52
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 8 meses
Puntos: 14
Javascript no espera a nadie.. Help!

Bueno maestros resulta que me he topado con un problema que ya conozco, nunca intente solucionarlo, siempre busque vias alternas, pero me entre en curiosidad de si existe alguna funcion que me ayude con este problemita.... Aquí va

Supongamos que tenemos

Código Javascript:
Ver original
  1. function A()
  2. {
  3.  B()
  4.  C()
  5.  D()
  6. }

Dada la funcion A(), donde contiene la ejecucion de tres funciones B() C() D(), el problema que se me presenta es que la funcion C() y D() no esperan a la funcion B() para ejecutarce, se ejecutaran asi las anteriores no allan llegado a su final

existe una funcion para decirle a javascript que se espere y no continue hasta que no termine la funcion que se ejecuta actualmente?¿

Gracias!
__________________
Juegos
Juegos iphone
  #2 (permalink)  
Antiguo 01/03/2010, 13:55
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Javascript no espera a nadie.. Help!

me imagino que usas AJAX que seria la unica forma de que no veas que espere, pues simplemente ejecuta los AJAX de modo sincrónico y no asíncrono

porque el funcionamiento normal de "la pila" solo se ve afectado por ajax
  #3 (permalink)  
Antiguo 01/03/2010, 13:56
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: Javascript no espera a nadie.. Help!

interesante pregunta...
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #4 (permalink)  
Antiguo 01/03/2010, 15:31
 
Fecha de Ingreso: enero-2009
Mensajes: 455
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Javascript no espera a nadie.. Help!

podrías intentar con la propiedad "defer" de javascript para ver si te sirve para lo que necesitas, de otra forma como te comentan si es por lo de ajax, prueba lo del modo sincrono y asincrono
  #5 (permalink)  
Antiguo 01/03/2010, 15:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Javascript no espera a nadie.. Help!

en este caso defer no tiene que ver nada. defer le indica al user-agent que puede continuar interpretando el codigo html sin esperar a que se interprete el codigo javascript ya que el script no escribira contenido al documento con document.write. de todos modos, la ejecucion de javascript es lineal, de modo que se interpreta sentencia por sentencia de arriba abajo. como ya se indico, lo mas seguro el tema tiene que ver con AJAX.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 01/03/2010, 15:50
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 8 meses
Puntos: 14
Respuesta: Javascript no espera a nadie.. Help!

no es tanto ajax, colocare un ejemplo practico

tenemos un LightBox (esas pantallitas oscuras que andan de moda en dhtml).. digamos que eso va asi

function lightbox()
{
ConfigurarDivOscuro() <- Configura la pantalla oscura y la pone block
AnimarDivOscuro() <- Anima la pantalla oscura con un alpha y settimeout
ConfigurarDivContenido() <- Configura la pantalla de contenido y la coloca block
}

Ok, lo que ocurre es esto, al momento de ejecutar AnimarDivOscuro(), se hace una animacion con un alpha y un setTimeout() para hacer efecto de que aparece, pero mientras esto se hace ya la funcion ConfigurarDivContenido() se cumplio y el div del contenido se mostrara antes de terminar la animacion del div oscuro

¿Como podria detener las otras funciones hasta que termine AnimarDivOscuro()? esto sin hacer todo el codigo y el setTimeout() dentro de lightbox()
__________________
Juegos
Juegos iphone
  #7 (permalink)  
Antiguo 01/03/2010, 16:01
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Javascript no espera a nadie.. Help!

no soy usuario de lightbox pero eso es normal porque setTimeout programa una instruccion para ejecutarse en cierto periodo, entonces el script continua. lo que necesitas es el concepto de callback o encadenamiento de instrucciones (chain). no estoy seguro pero creo que algunas librerias incluye el modelo de chain que no es otra cosa que interpretar codigo uno tras otro en un orden. dado que estas usando lightbox, lo mas seguro esta implementado con alguna libreria. verifica si tu libreria tiene algun soporte similar.

la forma del callback es similar, solo que el callback es una funcion que se invoca cuando ciertas condiciones se cumplen. un ejemplo, cuando la opacidad llega a su maximo o a cierto valor, se invoca el callback.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 01/03/2010, 16:03
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 8 meses
Puntos: 14
Respuesta: Javascript no espera a nadie.. Help!

Gracias, eres un crack : )! tendre en cuenta eso para documentarme

Saludos!
__________________
Juegos
Juegos iphone
  #9 (permalink)  
Antiguo 01/03/2010, 16:28
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 8 meses
Puntos: 14
Respuesta: Javascript no espera a nadie.. Help!

Oie pero una cosa no entendi.. ese ejemplo que me diste, ¿como compruebo la opacidad? con otro settimeout o como? retornaria a lo mismo, una funcion que este comprobandome si ya me respondieron, lo que no quiero es meter sittimeouts dentro d ela funcion principal, o se hace registrando eventos o como invoco callbacks, si conocs un tuto o algo te agradeceria, he buscado y no encuentro mucha explicacion
__________________
Juegos
Juegos iphone
  #10 (permalink)  
Antiguo 01/03/2010, 16:59
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Javascript no espera a nadie.. Help!

la comprobacion la haces en la misma funcion que recibe el callback. un ejemplo,
Código:
function counter(callback){
var thisFunc = arguments.callee;
if(thisFunc.count === undefined)thisFunc.count = 0;
if(thisFunc.count == 5)return callback(); // se comprueba si cumple alguna condicion;
thisFunc.count++;
setTimeout(function(){ // se vuelve a invocar la misma funcion;
thisFunc(callback); // se invoca la funcion counter pasando el callback;
}, 1000);
}

// el callback;
function message(func){
alert("el conteo llego a 5");
}

counter(message);
este ejemplo solo muestra el concepto de callback con el setTimeout. en realidad la funcion counter puede contener otras instrucciones pero para proposito del ejemplo se utiliza un contador.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 01/03/2010, 17:10
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Javascript no espera a nadie.. Help!

Un ejemplo interesante de cómo utilizar pseudoeventos lo podés encontrar en esta url del sitio de buzu:
http://imbuzu.wordpress.com/2009/11/...s-actualizado/
Notar cómo agrega y utiliza los eventos:
onFadeEnd, onFadeStart y onFadeStep. Secillo y eficiente ;)
  #12 (permalink)  
Antiguo 02/03/2010, 08:10
Avatar de minkweb  
Fecha de Ingreso: septiembre-2005
Mensajes: 443
Antigüedad: 18 años, 8 meses
Puntos: 14
Respuesta: Javascript no espera a nadie.. Help!

Muy buenos ejemplos, gracias a todos ahora es mas facil de entender

__________________
Juegos
Juegos iphone

Etiquetas: ejecucion
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 10:59.