Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/02/2012, 20:26
Avatar de Escain
Escain
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 3
Javascript sincronizacion/wait

Buenos días!

El problema que planteo puede ser algo confuso aunque lo voy a explicar lo mejor que pueda:

He desarrollado una función que implementa la típica línea "#include" en Javascript:
algo así como:
Código:
Include("otroArchivo.js");
El problema es que dicha función es sincrona y cuando hay muchos archivos, la carga se hace lenta.
He hecho pues la modificación del Include para que sea asíncrona.
Problema: imaginemos lo siguiente:
Código:
Include("archivoFuncionA.js");

var i = A();
Obviamente la segunda línea falla puesto que A no ha terminado la carga asíncrona y por lo tanto no existe aún.
Mi idea para solucionar esto es una fórmula que se usa mucho en OpenGL: Encerrar las instrucciones en un bloque:
Código:
Include.BeginAsync();
Include("archivoFuncionA.js"); Include("archivoFuncionB.js");
Include.EndAsync();
La función BeginAsync es trivial, pero la EndAsync es otra cosa.
De momento la he implementado con espera activa, es decir, comprobando cada 0.1s si todos los archivos que empezaron a cargarse ya finalizaron/cancelaron.

Las esperas activas no me gustan, la question que me preocupa ahora es pues si existe alguna forma (sea o no muy correcta para Javascript) para hacer en la función "EndAsync" una espera y que sea el evento de fin de carga el que reanude EndAsync.
En un lenguaje imaginario, sería algo asi:
Código:
Funcion EndAsync(){
Wait(10);
} Funcion onLoadedCallback(){
EndAsync.continue();
}
Es decir, la función evento al terminar de incluir el código cancela la espera de la función EndAsync, reanudando así la ejecución normal del código.

Muchas gracias de antemano por las aportaciones.