You have to chain your methods in a specific manner, you can easily do that in a following way (this code is not tested):
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
preinitialize="onPreInitialize();"
creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
private function onPreInitialize():void {
addEventListener( "RemoteResourceLoaded", remoteResourceLoaded );
loadARemoteResource();
}
private function loadRemoteResource():void {
// ...
}
private var _created:Boolean = false;
private function onCreationComplete():void {
// whatever you have here move it to the runTheApp() method...
_created = true;
runTheApp();
}
private var _resourcesReady:Boolean = false;
private function remoteResourceLoaded(event:Event):void {
// process your resources...
_resourcesReady = true;
runTheApp();
}
// this method will be called once the app is created
// and once when your resources are loaded
//
// 1:
// if app is created before resources are loaded its body
// is not going to be executed as _resourcesReady flag is false
// when resources are loaded it will then be called again
// and the body will be executed
//
// 2:
// if the resources are loaded before the app is created
// (during debugging?) it's gonna be called once but the
// _created flag is still false so the body is not processed
// when creationComplete fires both _created is set to true
// and method is called again, both conditions are true
// and the body gets executed
private function runTheApp():void {
if ( _resourcesReady && _created ) {
// now the app is fully created and resources are loaded
}
}
]]>
</mx:Script>
</mx:Application>
This shows the generic idea but I think it answers your question. It is generally the matter of waiting for the resource if it takes a long time to load and process creationComplete correctly if resource is loaded before creationComplete fires.
Hope this helps.