Foros del Web » Programando para Internet » Javascript »

Saber cuando termina funcion

Estas en el tema de Saber cuando termina funcion en el foro de Javascript en Foros del Web. Hola a todos, Llevo bastante tiempo con un problema que no soluciono y siempre termino esquivandolo haciendo cosas raras con variables que rulan entre funciones. ...
  #1 (permalink)  
Antiguo 14/05/2011, 08:14
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 1 mes
Puntos: 19
Saber cuando termina funcion

Hola a todos,

Llevo bastante tiempo con un problema que no soluciono y siempre termino esquivandolo haciendo cosas raras con variables que rulan entre funciones. Bueno... expongo mi problema como pregunta:

¿Como puedo saber si una funcion ha terminado de ejecutarse?. Por ejemplo:

Código Javascript:
Ver original
  1. function _primero()
  2.     {
  3.         //llamo a la segunda funcion:
  4.             _segunda();
  5.         //ejecuto codigo al terminar _segunda()
  6.             alert('la segunda funcion ya termino!!!');
  7.     }
  8. function _segunda()
  9.     {
  10.         //esta funcion durara x tiempo... sin determinar.
  11.         //actualmente lo que hago es que cuando termina modifica una variable,
  12.         //lo cual es un poco cutre.
  13.     }

¿Existe algun modo?, que no consita en modificar una variable al terminar una funcion y que tampoco consista en chequear cada x tiempo si ha terminado o no.

¿Se puede?... seria fantastico.
  #2 (permalink)  
Antiguo 14/05/2011, 09:31
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: Saber cuando termina funcion

No conozco otra manera. Y en los casos en los que no uses temporizadores tendrás que asegurarte de que no haya partes asíncronas para que funcione bien lo que estás planteando (me refiero al control al final de la definición de la función.)

Para evitar esos problemas es que se inventaron los callbacks ;)
  #3 (permalink)  
Antiguo 14/05/2011, 10:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Saber cuando termina funcion

Podrias implementar Observer.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 14/05/2011, 13:09
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: Saber cuando termina funcion

El problema de Observer es que notifica el inicio, pero no la finalización, que es lo que está pidiendo salbatore
  #5 (permalink)  
Antiguo 14/05/2011, 13:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Saber cuando termina funcion

Porque te parece que Observer solo notifica el inicio ?, en Observer el subject puede notificar en cualquier momento a los observers, no veo porque no puedo hacer un notify al final de una función, talves me estoy perdiendo algo, podrías aclarar tu punto de vista Panino5001 ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 14/05/2011, 14:01
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: Saber cuando termina funcion

Me refería al ejemplo de Dustin, que no detecta la finalización sino el lanzamiento (fire). Para que detecte la finalización hay que agregar métodos a ese ejemplo o directamente implementar broadcasting. Algo como esto: http://jstween.sourceforge.net/Tween.js
Imaginate además que _segunda no sea síncrona o que tenga dentro un setTimeout que la invoque una o más veces.

Última edición por Panino5001; 14/05/2011 a las 14:09
  #7 (permalink)  
Antiguo 14/05/2011, 15:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Saber cuando termina funcion

Talves la implementación del ejemplo no sea la mejor, pero lo que importa es el patrón, a ver si con este link se ve mejor la idea, si hay un timeout, dentro de este se notifica al observer y en el caso de un loop sin fin, no puede haber notificación ya que nunca termina, algo así:

Código Javascript:
Ver original
  1. var observer = new Observer();
  2. observer.observe('start', function(name, data, scope){...});
  3. observer.observe('complete', function(name, data, scope){...});
  4.  
  5.  
  6. function _primero() {
  7.     observer.fire('start', {params}, this);
  8.     _segunda();
  9. }
  10. function _segunda() {
  11.     ....
  12.     observer.fire('complete', {params}, this);
  13. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 14/05/2011, 17:34
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Saber cuando termina funcion

Si las funciones no involucran codigo asincronico (timeouts y/o ajax) es sencillo, ya que el interprete ejecuta las instrucciones secuencialmente.
Distinto es el caso si son asincronicas, ya que estas obligado a usar algun tipo flag. Si tenes ganas de buscar al respecto, te tiro un par de ideas, de las cuales seguramente alguna resuelve tu problema:

Pattern Observer como ya mencionaron, observas el cambio de estado de un objeto.
Callbacks, tu funciones reciben dentro de sus argumentos otra funcion que ejecutan en un momento dado.
Colas, podes implementar una cola para asegurarte el orden de ejecución de tus funciones.

Del primer y tercer caso escribí entradas en mi blog, si te interesa:

Pattern observer:
http://blog.aijoona.com/2011/02/11/patrones-de-diseno-y-javascript-observer/

Colas de ejecución básicas:
http://blog.aijoona.com/2011/04/30/implementando-colas-de-ejecucion-en-javascript/
__________________
blog | @aijoona
  #9 (permalink)  
Antiguo 15/05/2011, 13:34
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 1 mes
Puntos: 19
Respuesta: Saber cuando termina funcion

Gracias a todos. Ahora me pongo a investigar lo que me escribis. La verdad es que es un asunto importante este de las colas. Actualmente tengo varias por el codigo y es un rollo patatero. Acabas con funciones feas y dependientes de tu codigo 100%, una pena.

Bueno... muchas muchas gracias a todos.

Etiquetas: funcion
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 15:02.