Comunidad de diseño web y desarrollo en internet online

Devolver valores en eventos de Flex.

Citar            
MensajeEscrito el 27 Ene 2012 06:56 pm
Tengo una duda que creo es inherente al modo en que se programa en Flex.
Al realizar una consulta a un servidor el resultado de la misma se obtiene en el Eventhandler y por lo tanto de modo asíncrono.
Por ello no puedo crear una función que consulte y devuelva el valor, como mucho podré establecer una variable a ese valor, pero sin garantías de que el valor sea resultado de la consulta.
Lo lógico es que continúe el proceso en el Eventhandler pero eso no es siempre posible y me limita mucho pues no puedo reutilizar funciones.
Además, ¿ cómo puedo obtener valores de dos consultas distintas para continuar el proceso ? Tengo que esperar al EventHandler de ambas, pero ¿cómo?.

Todos los ejemplos que he visto son del tipo establecer texto en pantalla, cargar datagrid, etc. pero no he visto nada que trabaje con un valor devuelto para continuar procesandolo.

Por ejemplo: Supongamos que consulto X a un servidor e Y a otro para luego mostrar X+Y en pantalla, los valores de vuelta están en los EventHandler de cada consulta, no puedo continuar hasta que no conozco los valores, ambos.

Estoy acostumbrado a funciones síncronas devolviendo valores, supongo que tengo que cambiar el método pero no encuentro solución.

Por al_flex

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Ene 2012 12:28 pm
No entiendo bien la pregunta. Debes esperar a que lleguen ambos valores, claro, por eso es asíncrono. Si quieres trabajar de forma síncrona, mira si tienes posibilidad de usar sockets en tu servidor.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Ene 2012 12:42 pm
Gracias por la respuesta, Jorge.

Al servidor (PhotoshopTouch) le puedo enviar un mensaje y la respuesta siempre se devuelve en un EventHandler.
Por ejemplo, si le envío un mensaje preguntando si hay documento activo, la respuesta viene en el manejador y ahí tendría que continuar en caso afirmativo para preguntarle por la anchura del documento, la respuesta viene en otro manejador, cuando tengo ésta le pregunto por la altura y así hasta que termino.

Por lo tanto tengo que enviar nuevos mensajes en cada manejador del mensaje anterior lo cual implica que no puedo reutilizar el código pues cada cadena de mensajes y sus manejadores sólo tiene un propósito.

Lo ideal sería que tuviera una función tipo "Hay documentos activos?" con un valor de retorno. He probado con establecer una variable pública en el manejador pero eso no asegura que el valor sea correcto si la consulto antes de que se active el manejador de evento.

Supongo que es mucho más lógico que todo esto pero hay algo que se me escapa.

Por al_flex

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Ene 2012 01:10 pm
Si entiendes la diferencia entre síncrono y asíncrono, entonces entiendo que quieres que lo síncrono se comporte como asíncrono, es decir mas una expresión de deseos que una pregunta. En el caso de handlers si, usas colas de respuestas, marcas métodos, etc ... todo lo necesario para que cuando se complete la información puedas hacer algo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Ene 2012 02:01 pm
Mas bien al revés, desearía que lo asíncrono fuera síncrono.

Entiendo que la programación asíncrona es necesaria para el mundo web pero en air el comportamiento es algo distinto y no acabo de ver como crear programas que vayan más allá de presentar datos al usuario en el manejador.
Seguiré con ello :wink:

Por al_flex

1 de clabLevel



 

chrome

 

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