Comunidad de diseño web y desarrollo en internet online

problema con el tiempo de carga desde base de datos

Citar            
MensajeEscrito el 07 Feb 2006 06:42 pm
de nuevo otro problemilla en el mismo script que someto a vuestra legendaria e infinita sabiduria.

en un fotograma de la pelicula tengo una funcion que carga los usuarios de una base de datos en un objeto loadVars, y desde ahi escribe en los textFields el usuario que ocupa la posicion i y su contraseña. Esta funcion me devuelve el numero de usuarios que hay en la base de datos.

Código :

function llenarUsuariosEditar(i)
{
   var usuarios_lv:LoadVars = new LoadVars();
 
   usuarios_lv.load("http://akhasis.homeftp.net/arquitectura/mostrarusuarios.php");
   usuarios_lv.onLoad=function(exito)
   {
       nombreusuario_txt.text=eval("usuarios_lv.nombre"+i);
      pass1_txt.text=eval("usuarios_lv.pass"+i);
      pass2_txt.text=eval("usuarios_lv.pass"+i);
      
      numUsuarios=usuarios_lv.num;
      _root.num=numUsuarios;
            trace("este es el numero: "+numUsuarios);
      return numUsuarios;
   }
}


La funcion es correcta ya que el trace me muestra el numero de usuarios verdadero. Ahora viene mi problema: llamo a la funcion desde otro fotograma, con este codigo:

Código :

numTotal=llenarUsuariosEditar(1);
trace(numTotal);


y me da que numTotal es undefined. haciendo pruebas he descubierto que el problema esta en que se muestra numTotal antes de que la funcion devuelva el valor, es decir:

1) llamo a la funcion
2) la funcion carga desde la base de datos
3) el codigo que llama a la funcion intenta imprimir el numero, pero este todavia no se ha cargado desde la base de datos
y 4) la funcion carga el numero desde la base de datos, pero ya no se imprime

como podria hacer para que no el script no intente hacer el paso 3 antes que el 4? espero haberme explicado bien y gracias por adelantado.

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Feb 2006 08:08 pm
Bien (esto ya se ha explicado varias veces, pero bueno)

Imaginemos nuestro Script como un ente, una cajita negra. Una función es un evento que se ejecuta "de forma seguida" es decir, mientras se ejecuta una función no puede ejecutarse otra cosa. Esto nos permite mantener un orden "linea" más o menos en nuestro escript, es decir, algo como

función1();
función2();
funcion3();

Haría que se ejecutasen en orden, la función2 no empezaría hasta que funcion1 hubiese acabado (Esto no es del todo cierto, pero básicamente si)

Entre función1 y función2 solo transcurren unos ciclos de procesador (bueno, depende de lo que haga la función pero vamos) diremos que el tiempo es "despreciable" en estos caso.

Cuando se hace una llamada a una DB, por medio de LoadVars, XML, Remoting... lo que se hace es invocar una función que realiza una llamada a donde corresponda, es decir, salimos de nuestra cajita del script para llamar a otra cajita EXTERNA que puede ser un txt, Remoting, PHP,... Esta llamada dura mucho más que unos pocos ciclos de procesador, por lo pronto, si estamos en internet por ejemplo, debe de abrir una llamada al host, indicarle que archivo abrir y empezar a recibir los datos. Incluso siendo en local, donde todo ese tiempo de carga es despreciable y digamos inmediato es infinitamente superior al tiempo transcurrido entre dos funciones.

Por eso están los "Listenners" y capturadores, que son funciones que se activan cuando vuelven datos que se mandaron a pedir. por ejemplo los "onLoad"

Ejemplo que lo verás más claro :
"Estás trabajando en tu oficina, estás haciendo varias cosas (funciones), ves que te falta el informe del año pasado, llamas al departamento de contabilidad, que si te pueden acercar el informe (LoadVars,XML,Remoting). Sigues trabajando en tus cosas para no perder el tiempo. Cuando llega el informe entonces trabajas con él.

SOLUCIÓN Haz una función que imprima los valores
Llama a esa función cuando te lleguen los datos (onLoad)

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

firefox
Citar            
MensajeEscrito el 08 Feb 2006 09:35 am
muchas gracias por la explicación tan didáctica :D

Por akhasis

75 de clabLevel



 

firefox

 

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