Comunidad de diseño web y desarrollo en internet online

Return el Return de otra función.

Citar            
MensajeEscrito el 06 Oct 2007 05:42 pm
Hola, amigos, tengo una duda.
Estaba creando una Clase versión personalizada de los tutoriales para reproducir música y ver el id3 de un objeto Sound.

Mi problema, es que tengo una función que llama los Id3 dependiendo el nombre que le demos.
Pero si llamo el Id3 antes de que se cargue el Audio. Devuelve null.
pues hice esto:

Código :

public function getID3(id:String="all"):*{
Contador= new Timer(100);
Contador.start();
Contador.addEventListener(TimerEvent.TIMER, verificar);
function verificar(e:TimerEvent):String{
if(Cargado==true)
{
return So.id3.artist;
Contador.removeEventListener(TimerEvent.Timer, verificar);
}
}

}//Fin getID3

Ese es un ejemplo resumido.
Donde contador es un Timer que funciona correctamente.
y ejecuta la función verificar.
Que verifica la conecciín, que esta almacenada en una variable llamada Cargado
Si es así devuelve El artista.
Pero mi problema es que la función getID3 no toma el Return de verificar como su return.
me entienden?
Necesito que getID3 devuelva el return de verificar cuando este conectado.
Ojala puedan ayudarme. Muchas Gracias de ante mano. :wink:

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 06 Oct 2007 09:13 pm
No se....algo de este estilo?

Código :

public function getID3(id:String="all"):*{
Contador= new Timer(100);
Contador.start();
Contador.addEventListener(TimerEvent.TIMER, verificar);
function verificar(e:TimerEvent):String{
Retorno="";// o Retorno=false; según necesidad..
if(Cargado==true)
{
Retorno= So.id3.artist;
Contador.removeEventListener(TimerEvent.Timer, verificar);
}
}
return Retorno;
}//Fin getID3

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 06 Oct 2007 09:38 pm
Muchas gracias, pero no sirve.
Porque si yo llamo esa función antes de la carga de el audio responde "False"
Mi idea es que si la llamo y no ha sido cargado el audio, espere a que cargue y una vez cargado devuelva.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 06 Oct 2007 10:09 pm
Entonces usa un while sobre el return de una funcion watch en lugar de un timer.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 06 Oct 2007 10:46 pm
Me extiendo en lo anterior:
Seria algo así en tu ejemplo:

En el lugar donde creas la variable cargado cambiar por:

Código :

controlCarga={};
controlCarga.Cargado = false; // ...o lo que tengas, el caso es que sea propiedad de un objeto.

Cuando se completa la carga:
controlCarga.Cargado = true;


 Y la función:
public function getID3(id:String="all"):*{
   controlcarga.watch("Cargado",cargaWatcher);
   cargaWatcher = function(prop, oldVal, newVal){return newVal;}
   while(!controlCarga.Cargado){null};
   controlCarga.unwatch("Cargado");
   return So.id3.artist;
}

De este modo no mirará el cambio con el timer.....montones de veces, sino SOLO cuando cambie la propiedad ( Cargado sea true y no false)
Cuidado con el Bucle, a lo mejor hay que ponerle un contador de límite por si no carga nada!! Algo como:
cont=0;while(!controlCarga.Cargado||cont<100000000){cont++}; u otra condición, diferencias del getTimer() por ejemplo)

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 06 Oct 2007 11:35 pm
Lo probare, pero no entendi bién tu explicasion.
Otra cosa, deberias ocupar las Etiquetas[*code][*/code]
Sin los astericos...para poner tu codigo.
O apretando el boton code arriba.[/code]

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 06 Oct 2007 11:36 pm
Además te conté que es En As3?

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 06 Oct 2007 11:50 pm
Perdón si es que sonó mala onda.
Gracias...igual por la ayuda :wink:

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 07 Oct 2007 01:21 am
creo q no entiendo el porq tu enrollo, pero bueno U_U

nunca pero NUNCA, o por lo menos has el intento, llames a una funcion dentro de otra funcion, no te devuelve nada porq debes CAPTURAR tu return para poder utilizarla

otra cosa q veo, es q no debes poner nada despues del return, pues se deja de ejecutar tu function al leer esa linea ^^

igual, me di el tiempo de arreglarte una lectura de ID3

Código :

var url:String = "sanz.mp3";
var soundFactory:Sound
function malditaCancion() {
   var request:URLRequest = new URLRequest(url);
   soundFactory = new Sound();
   soundFactory.addEventListener(Event.ID3, id3Handler);
   soundFactory.load(request);
   soundFactory.play();
}
malditaCancion()

function id3Handler(event:Event):void {
   trace("maldito artista: " + soundFactory.id3.TPE1);
}


esta en fla, pero aun asi se puede pasar a class, ese code esta funcionando ^^

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 07 Oct 2007 01:21 am
ademas, debio moverse al foro de AS3

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 07 Oct 2007 01:39 am
Es que mira esplico mi problema más detalladamente.
Tengo una clase que sirve para cargar un Audio, y ademas le quise agregar la función.
getID3(); que devolvería cierta información.
La idea es que si yo llamo esa función, y aun no se ha cargado el audio, tan solo espere a que carge y luego responda.
Por eso yo puse un timer dentro hasta que se haya cargado y ejecuta la acción.
Pero no se como tomar el Return de la Función ejecutada por el Timer, para que sea devuelta por la función get ID3();

Ojala se haya entendido mejor.

:wink:

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 07 Oct 2007 01:44 am
para eso usa el COMPLETE

Código :

soundFactory.addEventListener(Event.COMPLETE, cargoTodo);


ademas, asi suelto como te puse en mi code, sale el ID3

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 08 Oct 2007 09:18 pm

Código :

public function getID3(id:String="all"):*{
Sonido.addEventListener(Event.COMPLETE, cargo);
function cargo (e:Event){
return Sonido.id3.artist;
}
}//Fin getID3

¿Algo como eso?
No crees que seria lo mismo?
Creo que igual no me devolvería el return al llamar la función getID3....
Pero haré la prueba.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 10 Oct 2007 03:46 am
ENTIENDE!!!!!!!!!!! no puedes hacer un return si no recibes el return y nunca se hace dentro de una funcion, dios mio, dios mio, dame paciencia y te juro q me volveré catolico U_U

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 10 Oct 2007 05:45 am
:S upale! es que si esta medio chambis JaLeRu...

Por bipsa

628 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Colombia

firefox
Citar            
MensajeEscrito el 10 Oct 2007 09:26 pm
Ok entonces que puedo hacer?
..Aunque me rendí. Nunca estaria mál encontrar la forma.

Algún comando como el "IF" pero que al detectar el cambio de un valor de True a False o de False a True haga algo.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 10 Oct 2007 09:33 pm
esa funcion se dispara y efecuta una accion, no necesitas hacer ningun IF, ya q al dispararse el EVENTO ya puedes hacer uso de el :S

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

firefox
Citar            
MensajeEscrito el 10 Oct 2007 10:22 pm
yo really dont understand me

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 12 Ene 2008 03:02 am
:lol: Woow que duro de cabeza estaba ese día.
Ja, ya entendí cual era mi problema. Bien tarde me llege a dar cuenta.
Simplemente no debía poner una función dentro de otra. :lol:
haré la prueba. (Era un proyecto muerto, que lo decidí revivir);

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 12 Ene 2008 10:58 am
jaja, eldervaz, tienes más paciencia que un santo :lol:

JaLeRu, si quieres seguir con el AS3, te aconsejo que te tomes unas cuantas horas para entender bien como funciona la arquitectura de eventos. Sino habrá gente que te estará dando las soluciones a tus problemas sin resultado alguno. :wink:

Un saludo!

Por llops

294 de clabLevel

1 tutorial

 

Barcelona

firefox
Citar            
MensajeEscrito el 12 Ene 2008 01:11 pm
Na si ya se harto de As3, esta pregunta la hice hace ya mucho cuando recién comenzaba.

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 12 Ene 2008 02:23 pm

JaLeRu escribió:

Na si ya se harto de As3, esta pregunta la hice hace ya mucho cuando recién comenzaba.


jaja, no me había dado cuenta de las fechas, como vi el post activo pensé que era reciente
Sorry!! :lol:

Por llops

294 de clabLevel

1 tutorial

 

Barcelona

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.