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:
El problema es que dicha función es sincrona y cuando hay muchos archivos, la carga se hace lenta.Include("otroArchivo.js");
He hecho pues la modificación del Include para que sea asíncrona.
Problema: imaginemos lo siguiente:
Código:
Obviamente la segunda línea falla puesto que A no ha terminado la carga asíncrona y por lo tanto no existe aún.Include("archivoFuncionA.js"); var i = A();
Mi idea para solucionar esto es una fórmula que se usa mucho en OpenGL: Encerrar las instrucciones en un bloque:
Código:
La función BeginAsync es trivial, pero la EndAsync es otra cosa.Include.BeginAsync();Include("archivoFuncionA.js"); Include("archivoFuncionB.js");Include.EndAsync();
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:
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.Funcion EndAsync(){Wait(10);} Funcion onLoadedCallback(){EndAsync.continue();}
Muchas gracias de antemano por las aportaciones.